在Win10下为软件指定默认输入法
程序员文章站
2024-03-14 09:04:10
...
引子
最近使用MathType较为频繁,然MathType每次打开都是系统默认的中文输入法,导致打公式时必须先切换成英文输入法才好使用,由此萌生了为其指定默认输入法的想法。
经验借鉴
通过在搜索引擎上检索后,我找到:根据不同的程序窗口设置输入法,这位作者的代码是AutoHotKey软件的脚本代码。
然该作者在代码中检测窗口的部分使用到了 窗口类名 这一参数,故我还需要找到获取 窗口类名 的方法。最终选择使用autohotkey自带的窗口检测程序获取窗口类名。
动手环节
1、获取窗口类名
在autohotkey的安装目录下有一个名为"ActiveWindowInfo.ahk"程序可以自动获取窗口的类名:
运行之后在这里可以看到窗口类名:
2、AutoHotKey脚本的实现
参考根据不同的程序窗口设置输入法,安装好AutoHotKey后,将以下代码复制到一个.ahk文件中,之后用AutoHotKey打开即可。
#Persistent
Gui +LastFound
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,hWnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage")
Return
ShellMessage( wParam,lParam ) {
If ( wParam = 1 )
{
WinGetclass, WinClass, ahk_id %lParam%
If Winclass in EQNWINCLASS ;EQNWINCLASS是需要开启中文输入的窗口类名(即MathType的窗口类名),可以有多个程序,之间用‘,’隔开
{
winget,WinID,id,ahk_class %WinClass%
SetLayout("00000409",WinID) ;00000409是英语美式键盘的输入法代码,00000804是中文美式键盘的输入法代码,系统内安装的输入法代码可以在注册表HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Keyboard Layouts查到
}
}
}
SetLayout(Layout,WinID){
DllCall("SendMessage", "UInt", WinID, "UInt", "80", "UInt", "1", "UInt", (DllCall("LoadKeyboardLayout", "Str", Layout, "UInt", "257")))
}
尾声
这次的探索让我发现了AutoHotKey这个神器,该软件的用途还有很多,以后有时间可以深入的学学。
上一篇: Java学习 Object类
下一篇: 2.mysql取出JSON格式的语法
推荐阅读