[Урок] Переключение раскладки выделенного текста - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
[Урок] Переключение раскладки выделенного текста
[CM]The_Wanderer Дата: Четверг, 27.06.2013, 17:35 | Сообщение # 1
Новичок
Сообщений: 3
Статус: Offline
Всем привет. Вот один скрипт он меня. Что он делает? допустим, мы ввели какое-либо слово на другом языке, нам надо быстро его переделать. Что мы делаем? мы выделяем текст, либо Ctrl + A, жмем кнопку 1 и скрипт меняет раскладку выделенного текста. Файл решил не заливать, а просто разместить код. Кнопку активации можно поменять в самом начале, строчка - 1::SwitchKeysLocale(). Названия кнопок можно найти в этой теме - http://cheat-master.ru/forum/149-130710-1.

Код
1::SwitchKeysLocale()

SwitchKeysLocale()
{
     Critical
     SetBatchLines, -1
     SetKeyDelay, 0

     TempClipboard := ClipboardAll
     Clipboard =
     SendInput, ^{vk43}   ; Ctrl + C
     ClipWait, 0
; если буфер обмена пуст (ничего не выделено), определяем и выделяем
; с помощью ф-ции GetWord() последнее слово слева от курсора
     SelText := ErrorLevel ? GetWord() : Clipboard
     pResult := ConvertText(SelText)   ; получаем конвертированный текст и раскладку последней найденной буквы

     Clipboard := StrGet(pResult + A_PtrSize)
     SendInput, ^{vk56}   ; Ctrl + V
; переключаем раскладку клавиатуры в зависимости от раскладки последней найденной буквы
     Sleep, 200
     SwitchLocale(NumGet(pResult+0, "UInt"))
     Sleep, 200
     Clipboard := TempClipboard
}

GetWord()
{
     While A_Index < 10
     {
        Clipboard =
        SendInput, ^+{Left}^{vk43}
        ClipWait, 1
        if ErrorLevel
           Return

        if RegExMatch(Clipboard, "P).*([ \t])", Found)
        {
           SendInput, ^+{Right}
           Return SubStr(Clipboard, FoundPos1 + 1)
        }

        PrevClipboard := Clipboard
        Clipboard =
        SendInput, +{Left}^{vk43}
        ClipWait, 1
        if ErrorLevel
           Return

        if (StrLen(Clipboard) = StrLen(PrevClipboard))
        {
           Clipboard =
           SendInput, +{Left}^{vk43}
           ClipWait, 1
           if ErrorLevel
              Return

           if (StrLen(Clipboard) = StrLen(PrevClipboard))
              Return Clipboard
           Else
           {
              SendInput, +{Right 2}
              Return PrevClipboard
           }
        }

        SendInput, +{Right}

        s := SubStr(Clipboard, 1, 1)
        if s in %A_Space%,%A_Tab%,`n,`r
        {
           Clipboard =
           SendInput, +{Left}^{vk43}
           ClipWait, 1
           if ErrorLevel
              Return

           Return Clipboard
        }
     }
}

ConvertText(Text)
{
     static Result

     Cyr := "ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю"
     Lat := "~QWERTYUIOP{}ASDFGHJKL:""ZXCVBNM<>``qwertyuiop[]asdfghjkl;'zxcvbnm,."

     Loop, parse, Text
     {
        found =
        if found := InStr(Lat, A_LoopField, 1)
           NewText .= SubStr(Cyr, found, 1), lastfound := 2

        if !found
           if found := InStr(Cyr, A_LoopField, 1)
              NewText .= SubStr(Lat, found, 1), lastfound := 1

        if !found
           NewText .= A_LoopField
     }
     VarSetCapacity(Result, A_PtrSize + StrPut(NewText)*(A_IsUnicode ? 2 : 1))
     NumPut(lastfound, &Result), StrPut(NewText, &Result + A_PtrSize)
     Return &Result
}

SwitchLocale(lastfound)
{
     SetFormat, IntegerFast, H
     VarSetCapacity(List, A_PtrSize*2)
     DllCall("GetKeyboardLayoutList", Int, 2, Ptr, &List)
     Locale1 := NumGet(List)
     b := SubStr(Locale2 := NumGet(List, A_PtrSize), -3) = 0409
     En := b ? Locale2 : Locale1
     Ru := b ? Locale1 : Locale2
     SendMessage, WM_INPUTLANGCHANGEREQUEST := 0x50,, lastfound = 1 ? En : Ru,, A
}
Lechqa Дата: Суббота, 11.01.2014, 10:35 | Сообщение # 2
Новичок
Сообщений: 5
Статус: Offline
Красавчик) +
Artem_Buero Дата: Суббота, 11.01.2014, 11:26 | Сообщение # 3
Сообщений: 4223
Статус: Offline
Цитата Lechqa ()
Вот один скрипт он меня


http://forum.script-coding.com/viewtopic.php?id=7186 (Не реклама)
Укажи автора и то что скопипасил


МОЙ ВК - https://vk.com/gospodin_buero
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7210]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
pidoras22 [19:34]

maureenwp18 [19:13]

mikeallen1975 [21:21]

azek [18:16]

kellimp1 [08:27]

marais60 [14:42]

erinkg5 [04:25]

guadalupewb9 [20:30]

bobbieiv69 [16:32]

Влад121 [18:01]

martinaiz2 [15:54]

XaNaX200 [13:45]

qwer123QZE [11:48]