如何在 Windows 7 中使用自动热键发送键盘布局切换事件?

如何在 Windows 7 中使用自动热键发送键盘布局切换事件?

我想将键盘布局/语言切换重新映射到Win+ Space,我尝试过:

LWin & Space::Send, ^+

但它似乎不起作用,我希望它发送一个Ctrl+Shift序列,以便我可以使用Win+在键盘布局之间切换Space

我怎样才能让它工作?

答案1

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/

答案2

@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 级;您需要引用它或者将其复制并粘贴到您的代码中。

答案3

你确定这是Ctrl+吗Shift?在我的系统上它是Alt+ Shift。无论如何,请使用以下命令:

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

如果您的系统确实使用Ctrl+Shift组合,请将 Alt 替换为 Ctrl。

答案4

你的脚本是:

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

然后安装 puntoswitcher 并在控制板上设置更改语言。就这样

相关内容