Як надіслати подію перемикання розкладки клавіатури з автоматичною клавішею в Windows 7?


4

Я хочу переробити макет клавіатури / перехід мови на Win+ Space, я спробував це:

LWin & Space :: Надіслати, ^ +

Але це, здається, не працює, я хотів би, щоб він надсилав послідовність Ctrl+, Shiftщоб я міг перемикатися між розкладками клавіатури з Win+ Space.

Як я можу змусити цю роботу?


1
У Windows 10 це зараз за замовчуванням.
Халід Хуссейн

І хлопче, я хочу, щоб я міг його вимкнути.
Кріс Ф Керролл

Відповіді:


8

Перемикач 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/


Порада. Будь ласка, використовуйте "Str", "00000C00"для англійської верстки за замовчуванням. Працює як шарм! Якби я тепер міг відключити ярлик ALT + SHIFT, тож змінює його лише WIN + SPACE ...
user7783780

1

Ви впевнені, що це Ctrl+ Shift? У моїй системі це Alt+ Shift. все одно, скористайтеся цією командою:

LWin & Space::Send, {Alt Down}{Shift}{Alt up}

Замініть Alt на Ctrl, якщо ваша система дійсно використовує комбінацію Ctrl+ Shift.


1

Сценарій @Andrei Pak має такі обмеження:

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


1
Це здається не повною, самодостатньою відповіддю на питання. Чи можете ви докладно?
fixer1234

Добре тоді, якщо ви так говорите.
крадькома

Це набагато краще рішення.
Герб Каділл

0

Ви можете легко (змінивши перші два рядки на:

$~#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

Ваш сценарій:

#Space::
Sleep 500
Send, {CTRL}
return

потім встановіть puntoswitcher і встановіть мову зміни на контрольній пресі. це все

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.