AutoHotkey+BUG小狼毫+BUG win10输入法设置的艰难摸索(未完待续)
2021-03-11 02:29
标签:hid 进制 状态 设置 sel 就会 键盘输入 color form 第一目标:只用小狼毫输入法(默认英文),由于: 第二目标:英文+小狼毫输入法,需要 AutoHotkey 能获取当前是英文键盘还是小狼毫,这样能实现在不同输入法状态使用不同的鼠标形状 还用到 imetool.exe 小工具,从win7时一直在用的。 英文有美国键盘和英国键盘之分, 但是美国键盘属于中文系的,AutoHotkey无法区分当前是小狼毫输入法还是美国键盘输入法 所以就只好用英文键盘了,不爽的就是用小狼毫时,托盘图标会多个 CH 图标(win7时还强迫症用脚本删除该图标,现在只能忍忍) 英文时是单个 EN 图标。 删除英文输入法只剩小狼毫时,又会出现两个小狼毫(BUG,影响 Win-Space 无脑切换) 实现方式: 相关代码: AutoHotkey+BUG小狼毫+BUG win10输入法设置的艰难摸索(未完待续) 标签:hid 进制 状态 设置 sel 就会 键盘输入 color form 原文地址:https://www.cnblogs.com/hyaray/p/12657774.html
;切换输入法
changeIME(sID)
{
WinActive("A")
ctl := ControlGetFocus() || WinGetID()
PostMessage(0x50,, dllcall("LoadKeyboardLayout", "str",sID, "uint",1), ctl, "A") ;NOTE 美国英语要用"08040804" 若不放ctl 在TC帮助的查找窗口无法切换
}
;在用的所有输入法sID(8位16进制字符串)
;TODO 小狼毫 ****0804,而不是 E**
arrUsingSid()
{
cnt := dllcall("GetKeyboardLayoutList", "uint",0, "uint",0)
VarSetCapacity(hkl, cnt*4, 0)
dllcall("GetKeyboardLayoutList", "uint",cnt, "uint",&hkl)
arr := []
loop(cnt)
{
sID := format("{:08X}", numget(hkl,(A_Index-1)*4))
;sID := (sID = "08040804") ? "00000804" : sID
arr.push(sID)
}
return arr
;方法2 见 HKEY_CURRENT_USER\Keyboard Layout\Preload
}
;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
}
文章标题:AutoHotkey+BUG小狼毫+BUG win10输入法设置的艰难摸索(未完待续)
文章链接:http://soscw.com/index.php/essay/62998.html