如何判断输入法是中文还是英文状态?[已解决]
本帖最后由 cashiba 于 2017-3-18 09:42 编辑点击托盘语言栏,有如下输入法:
注册表里输入法Keyboard Layouts里键名很多。删除无关的后,如下:
Windows Registry Editor Version 5.00
"Layout Text"="US"
"Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5000"
"Layout File"="KBDUS.DLL"
"Layout Text"="Chinese (Simplified) - US Keyboard"
"Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5072"
"Layout File"="KBDUS.DLL"
"IME File"="IMSC40A.IME"
"Layout Text"="中文 (简体) - 微软拼音"
"Layout File"="kbdus.dll"
"Ime File"="SOGOUPY.IME"
"Layout Text"="中文 (简体) - 搜狗拼音输入法"
"Layout File"="kbdus.dll" 这段代码米看懂,不知道怎么改.....{:face (396):}
Opt("WinTitleMatchMode", 4)
Run("notepad.exe")
Sleep(500)
$hWnd = WinGetHandle("classname=Notepad")
;~ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts
$KeyStr=_GetKeyboardLayout($hWnd)
$KeyName=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\" & $KeyStr, "Layout Text")
MsgBox (0, $KeyStr, $KeyName);显示当前输入法
LoadKeyboardLayout("E0200804", $hWnd);设为搜狗拼音输入法 你应该先确认输入法是否已安装
Func _GetKeyboardLayout($hWnd)
Local $ret = DllCall("user32.dll", "long", "GetWindowThreadProcessId", "hwnd", $hWnd, "ptr", 0)
$ret = DllCall("user32.dll", "long", "GetKeyboardLayout", "long", $ret)
Return Hex($ret, 8)
EndFunc
Func LoadKeyboardLayout($sLayoutID, $hWnd)
Local $WM_INPUTLANGCHANGEREQUEST = 0x50
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 1 + 0)
DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $ret)
EndFunc ;==>LoadKeyboardLayout AHK里讲的狠仔细,不过有点看不懂......
http://ahk8.com/thread-3751.html
页:
[1]