4

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

LWin & Space:: Отправить, ^+

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

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

5 ответов5

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/

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

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 и установите смену языка на контрольной прессе. это все

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .