在Win10下使用AutoHotKey为软件指定默认输入法

引子

最近使用MathType较为频繁,然MathType每次打开都是系统默认的中文输入法,导致打公式时必须先切换成英文输入法才好使用,由此萌生了为其指定默认输入法的想法。

经验借鉴

通过在搜索引擎上检索后,我找到:根据不同的程序窗口设置输入法,这位作者的代码是AutoHotKey软件的脚本代码。
然该作者在代码中检测窗口的部分使用到了 窗口类名 这一参数,故我还需要找到获取 窗口类名 的方法。最终选择使用autohotkey自带的窗口检测程序获取窗口类名。

动手环节

1、获取窗口类名

在autohotkey的安装目录下有一个名为"ActiveWindowInfo.ahk"程序可以自动获取窗口的类名:
在Win10下使用AutoHotKey为软件指定默认输入法_第1张图片运行之后在这里可以看到窗口类名:
在Win10下使用AutoHotKey为软件指定默认输入法_第2张图片

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这个神器,该软件的用途还有很多,以后有时间可以深入的学学。

你可能感兴趣的:(AutoHotKey)