Сценарій @Andrei Pak має такі обмеження:
- Не працює в діалоговому вікні 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 ; вам потрібно буде посилатися на це або скопіювати та вставити його у свій код.