标签:hid 进制 状态 设置 sel 就会 键盘输入 color form
第一目标:只用小狼毫输入法(默认英文),由于:
第二目标:英文+小狼毫输入法,需要 AutoHotkey 能获取当前是英文键盘还是小狼毫,这样能实现在不同输入法状态使用不同的鼠标形状
还用到 imetool.exe 小工具,从win7时一直在用的。
英文有美国键盘和英国键盘之分,
但是美国键盘属于中文系的,AutoHotkey无法区分当前是小狼毫输入法还是美国键盘输入法
所以就只好用英文键盘了,不爽的就是用小狼毫时,托盘图标会多个 CH 图标(win7时还强迫症用脚本删除该图标,现在只能忍忍)
英文时是单个 EN 图标。
删除英文输入法只剩小狼毫时,又会出现两个小狼毫(BUG,影响 Win-Space 无脑切换)
实现方式:
相关代码:
;切换输入法 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输入法设置的艰难摸索(未完待续)
标签:hid 进制 状态 设置 sel 就会 键盘输入 color form
原文地址:https://www.cnblogs.com/hyaray/p/12657774.html