AutoHotkey+BUG小狼毫+BUG win10输入法设置的艰难摸索(未完待续)
目标:
- 默认英文输入法(常规设置无效,暂时还未找到解决方案)
- 用脚本能精确转成英文或中文输入法,在某些情况下就能减少手工切换的过程,比如
win-r
后自动转成英文输入法
最优雅的方式(暂时不可用):只用一个输入法(小狼毫)
这样只需要用Shift键切换状态即可
不可用原因:
- AutoHotkey无法获取小狼毫当前是英文还是中文状态,这样在必须要英文的情景下,无法保证是英语状态,不理想。见 https://github.com/rime/weasel/issues/468
- 小狼毫英文状态下,在gvim中快速输入会自动转为中文,相关bug见
常规方式:英文+小狼毫输入法
英文有【中文-美式键盘】和【英语-美式键盘】(需要添加语言English (United States)
),要用后者
,原因:
AutoHotkey暂时无法区分当前是【小狼毫】还是【中文-美式键盘】输入法
用ahk切换输入法,附上 AutoHotkey v2-beta 代码
;i 0=英文 1=中文
toIME(i:=1) {
;获取sID
if (type(i) == "Integer") {
switch i {
case 0: sID := "00000409" ;美式键盘-ENG
case 1: sID := "00000804" ;中文 也可用 E0200804
default: return
}
} else {
sID := i
}
WinActive("A")
ctl := ControlGetFocus() || WinGetID()
PostMessage(0x50,, dllcall("LoadKeyboardLayout", "str",sID, "uint",1), ctl)
}
;TODO rime和极点无效,微软拼音可以
;某日本人脚本中的获取输入法中英文状态(英文0,中文1)
getState(winTitle:="A") {
if !(idWIn := WinExist(winTitle))
return
DefaultIMEWnd := dllcall("imm32\ImmGetDefaultIMEWnd", "uint",idWin, "uint")
DetectSave := A_DetectHiddenWindows
DetectHiddenWindows true
res := SendMessage(WM_IME_CONTROL:=0x283, IMC_GETOPENSTATUS:=5,,, "ahk_id " . DefaultIMEWnd)
DetectHiddenWindows DetectSave
return res
}