Как отправить событие переключения раскладки клавиатуры с помощью autohotkey в Windows 7?
Я хочу переназначить раскладку клавиатуры / переключение языков на Win + Space , я попробовал это с помощью:
LWin & Space :: Send, ^ +
Но, похоже, это не работает, я бы хотел, чтобы он отправил последовательность Ctrl + Shift , чтобы я мог переключаться между раскладками клавиатуры с помощью Win + Space .
- Последовательность клавиш Autohotkey `1
- Как записать макросы для Autohotkey?
- Есть ли AutoHotKey для Ubuntu?
- Создайте горячую клавишу / комбинацию клавиш, чтобы закрыть окно Notepad ++ Find Results
- Повторная настройка программного обеспечения Logitech SetPoint
Как я могу сделать эту работу?
- Отладка AHK (Auto Hot key) - как я могу распечатать строку отладки в скрипте python для консоли?
- Как выбрать текст, затем конвертировать с тегом html?
- Есть ли способ создать пользовательскую горячую клавишу в Windows, которая закроет текущее окно или под-окно?
- Отправить двойной щелчок с помощью Autohotkey
- Перемещение Ctrl-Alt-Arrow в Windows 10 с помощью AutoHotkey
- AutoHotkey (клавиатура ЕС): как переназначить LCtrl при сохранении AltGr
- Каков самый простой способ получить горячую клавишу yhy-mm-dd hh: mm: ss timestamp на Mac?
- Autohotkey - Координаты движения мыши немного выключены
Переключатель Win + Space отлично работает на моем win7-x64:
; This should be replaced by whatever your native language is. See ; http://msdn.microsoft.com/en-us/library/dd318693%28v=vs.85%29.aspx ; for the language identifiers list. ru := DllCall("LoadKeyboardLayout", "Str", "00000419", "Int", 1) en := DllCall("LoadKeyboardLayout", "Str", "00000409", "Int", 1) #Space:: w := DllCall("GetForegroundWindow") pid := DllCall("GetWindowThreadProcessId", "UInt", w, "Ptr", 0) l := DllCall("GetKeyboardLayout", "UInt", pid) if (l = en) { PostMessage 0x50, 0, %ru%,, A } else { PostMessage 0x50, 0, %en%,, A }
Подробнее: http://www.autohotkey.com/board/topic/70019-keyboard-layout-switcher-for-many-layouts/
Вы уверены, что это Ctrl + Shift ? В моей системе это Alt + Shift . В любом случае, используйте эту команду:
LWin & Space::Send, {Alt Down}{Shift}{Alt up}
Замените Alt для Ctrl, если ваша система действительно использует комбинацию Ctrl + Shift .
Вы можете легко (изменив первые две строки на:
$~#Space::LangSwitch(1) $~#Space up::LangSwitch(2)
) Измените переключатель макета клавиатуры WOxxOm для использования Win + Space вместо правильного управления. И он будет работать независимо от того, какие горячие клавиши настроены для переключения макета в Windows (по умолчанию Alt + Shift, я использую Ctrl + Shift).
Из-за неактивного переключения (сценарий использует WinAPI) весь скрипт довольно громоздкий, поэтому я не вставлял его в строку. В случае недоступности autohotkey.com здесь это: http://pastebin.com/ygm3f6sp
(Опять же, все кредиты идут на wOxxOm, исходный скрипт есть: http://www.autohotkey.com/board/topic/24666-keyboard-layout-switcher/ )
PS Этот скрипт довольно старый и имеет жестко закодированные байты-смещения, поэтому я не уверен, что он будет работать с 64-битным Autohotkey.exe или в 64-разрядной Windows. У меня только 32-бит.
У сценария Андрея Пака есть как минимум следующие ограничения:
- Не работает в диалоговом окне FileOpen и некоторых других окнах
- Не работает в консольных окнах
- Вам нужно заранее знать KLID макета (0x04090409 и т. Д.) И изменить его в коде (грязный жесткий код).
Этот скрипт перемещается по вашим активным макетам с помощью Win + Space :
#Space::PostMessage WM_INPUTLANGCHANGEREQUEST:=0x50, INPUTLANGCHANGE_FORWARD:=0x2,,, % (hWndOwn := DllCall("GetWindow", Ptr, hWnd:=WinExist("A"), UInt, GW_OWNER := 4, Ptr)) ? "ahk_id" hWndOwn : "ahk_id" hWnd
Если вы хотите большего контроля (иметь> 2 макета, нужна горячая клавиша для установки определенного макета):
F2::Lyt.Set() ; switch input language. F3::Lyt.Set("Forward") ; move forward (cycle) in current layout list F4::Lyt.Set("-en") ; set first non-english F7::Lyt.Set("en", "global") ; set first english layout in all windows F8::Lyt.Set(2) ; set second layout in current layout list
Использование класса Lyt (класс копирования ниже вашего кода, чтобы использовать его в вашем скрипте).
Ваш скрипт:
#Space:: Sleep 500 Send, {CTRL} return
Затем установите puntoswitcher и установите язык смены на пульте управления. это все