Как отправить событие переключения раскладки клавиатуры с помощью autohotkey в Windows 7?

Я хочу переназначить раскладку клавиатуры / переключение языков на Win + Space , я попробовал это с помощью:

LWin & Space :: Send, ^ +

Но, похоже, это не работает, я бы хотел, чтобы он отправил последовательность Ctrl + Shift , чтобы я мог переключаться между раскладками клавиатуры с помощью Win + Space .

Как я могу сделать эту работу?

Переключатель 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-бит.

У сценария Андрея Пака есть как минимум следующие ограничения:

  1. Не работает в диалоговом окне FileOpen и некоторых других окнах
  2. Не работает в консольных окнах
  3. Вам нужно заранее знать 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 и установите язык смены на пульте управления. это все

  • Как использовать фокус ввода / textarea как условие для горячих клавиш
  • Отдельные действия в разных программах
  • Autohotkey - установить горячую клавишу для переключения (отключено с помощью сценария автозапуска дыр)
  • Autohotkey имитирует блокировку прокрутки дважды
  • Как переназначить программу для блокировки Windows (Win + L)
  • Можно ли переключаться между окнами одного типа с помощью AutoHotkey?
  • Как я могу использовать Autohotkey для фокусировки на существующей вкладке Google Chrome, а не в окне «контейнера»?
  • Потребляйте нажатие клавиши в autohotkey (не позволяйте ей распространяться в других приложениях)
  • Перенос электронной почты в определенную папку с помощью сочетания клавиш в Outlook 2010
  • Как увеличить максимальные горячие клавиши за интервал?
  • Autohotkey + LButton SendInput {Shift Up}
  • Давайте будем гением компьютера.