我的 Windows 机器上有三种输入语言(俄语、英语和法语)。但是,我很少使用法语键盘。所以我想让Alt+Shift组合键在俄语和英语之间循环,这样法语就只能通过菜单使用了。这样可以吗?
答案1
Advanced Key Setting
您可以在对话框中设置切换语言或键盘布局的组合键。要打开该Advanced Key Setting
对话框,请右键单击Language bar
,然后单击Settings
。在 下Preferences
,单击Key Settings
。
或者查看控制面板中的语言栏设置。
答案2
您可以使用 AutoHotKey 脚本来实现这一点。
以下脚本是美国英语和希伯来语之间循环的示例,同时还有 3 种可用语言(俄语、传统印地语和印地语语音)。其工作原理如下:
- 当按下left alt+时,它会等待它们被释放。left shift
- 如果没有额外按下按键就释放它们,则只会循环显示英语和希伯来语(这是结束
else
部分)。 - 如果按下以下任意键:1,2,3,则键盘布局将更改为指定的语言(分别为俄语、印地语繁体版和印地语语音)。
这里是:
LAlt & LShift::waitAndSet()
waitAndSet() {
KeyWait, LAlt
KeyWait, LShift
USA := 0x4090409
HEB := 0x40d040d
RUS := 0x4190419
HIN := 0x00000439
HINPHON := 0x04090439
if (A_PriorKey = "1") {
setDefaultKeyboard(RUS)
}
else if (A_PriorKey = "2") {
setDefaultKeyboard(HIN)
}
else if (A_PriorKey = "3") {
setDefaultKeyboard(HINPHON)
}
else {
currentKeyboardLayout := getCurrentKeyboardLayout()
setDefaultKeyboard(currentKeyboardLayout = USA ? HEB : USA)
}
}
setDefaultKeyboard(hkl){
SPI_SETDEFAULTINPUTLANG := 0x005A
, SPIF_SENDWININICHANGE := 2
, WM_INPUTLANGCHANGEREQUEST := 0x50
VarSetCapacity(binaryhkl, 4, 0)
NumPut(hkl, binaryhkl)
DllCall("SystemParametersInfo", "uint", SPI_SETDEFAULTINPUTLANG, "uint", 0, "uptr", &binaryhkl, "uint", SPIF_SENDWININICHANGE)
PostMessage WM_INPUTLANGCHANGEREQUEST, 0, % hkl, , A
}
getCurrentKeyboardLayout() {
SetFormat, Integer, H
WinGet, WinID,, A
ThreadID:=DllCall("GetWindowThreadProcessId", "uint", WinID, "uint", 0)
priorHKL :=DllCall("GetKeyboardLayout", "uint", ThreadID, "uint")
Return priorHKL
}
评论:
你提到基拉在评论中,但我试过了,它有很多错误并且不再维护,另外你必须使用 Windows 的高级键盘设置(添加设置非循环语言的快捷方式)也有 bug。
通过手动将布局更改为每种语言并
getCurrentKeyboardLayout
每次运行,可以检索指定语言的 HKL 硬编码值。您可以阅读此帖了解更多背景信息。在某些情况下它不起作用,但我找不到一致的行为。
例如,对于 Hindi Traditional,getCurrentKeyboardLayout
实际上返回0xf00c0439
(而不是上面代码中的值),但使用它不起作用。
再举一个例子,对于俄语助记符键盘,getCurrentKeyboardLayout
返回0xf0330419
,同样,使用此值不起作用。事实上,如果你的机器上同时有俄语和俄语助记符布局,使用0x4190419
有时会将布局更改为俄语,但有时会更改为俄语助记符,取决于以前使用的语言!“解决方案”是删除其中一个。