有没有办法让SEND模拟键盘输入不受输入法的影响?
想写个工具代码及GUI界面已经基本完成但是还有个问题解决不了论坛的大大们帮忙看看
就是当ControlSend 模拟键盘输入时如果输入法是中文就会导致输入出错
求解 自己写的,可做参考,应该比上面的在某些场合更可靠些。
Func _WinIMEselect($sLayoutID = "E0804804", $title = "", $xPos_mouseclick = 129, $yPos_mouseclick = 96, $mousekey = "left", $counter = 2)
;;说明
;;功能描述:鼠标左键点击当前窗口可输入位置(坐标$xPos_mouseclick, $yPos_mouseclick),更改输入法,默认为左键点击129,96位置2次,输入法更改为英文(中文中国)
;;参数:$sLayoutID 输入法代码。输入法代码和名称,具体查看注册表:Windows Registry Editor Version 5.00
;~ 当前用户输入法顺序查看注册表:
#CS 常见输入法代码
00000409 - 英文输入法
E0040804 - 智能ABC输入法
E0010804 - 全拼输入法
E0100804 - 王码五笔型输入法86版
E0200804 - 极品五笔输入法
E0200804 - 搜狗拼音输入法
E0220804 - 万能五笔输入法
E00E0804 - 微软拼音输入法
E0020804 - 双拼输入法
E0050804 - 区位码输入法
E0030804 - 郑码输入法
#CE
;~ $title 窗口标题,默认当前活动窗口
;~ $xPos_mouseclick 鼠标点击x坐标,默认值129
;~ $yPos_mouseclick 鼠标点击y坐标,默认值96
;~ $mousekey 鼠标键,默认左键"left"
;~ $counter 鼠标点击数,默认点击2次
MouseClick($mousekey, $xPos_mouseclick, $yPos_mouseclick, $counter)
$hWnd = WinGetHandle($title)
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 ;==>_WinIMEselect 试试调用API函数 PostMessage 发送 WM_CHAR 消息。 回复 2# baikaifang
能说具体点不新手来着的 2楼正解,当然你还可以把中文输入法关了
论坛有这方面的贴子
不过好像在win7下不通用 谢谢楼上的朋友我搜索下 自己顶下没人帮解答下吗? 给你个示例代码Dim Const $WM_CHAR = 0x102
Dim Enum $VK_A = 0x41, $VK_B, $VK_C, $VK_D, $VK_E
Dim $hNote, $hEdit, $aRet
Run('notepad.exe')
Opt('WinTitleMatchMode', 4)
WinWait("", '', 10)
$hNote = WinGetHandle("")
Opt('WinTitleMatchMode', 1)
$hEdit = ControlGetHandle($hNote, '', 'Edit1')
_WinAPI_PostMessage($hEdit, $WM_CHAR, $VK_A, 0)
_WinAPI_PostMessage($hEdit, $WM_CHAR, $VK_B, 0)
_WinAPI_PostMessage($hEdit, $WM_CHAR, $VK_C, 0)
_WinAPI_PostMessage($hEdit, $WM_CHAR, $VK_D, 0)
_WinAPI_PostMessage($hEdit, $WM_CHAR, $VK_E, 0)
Func _WinAPI_PostMessage($hWnd, $iMsg, $iwParam, $ilParam)
Local $aResult = DllCall("user32.dll", "bool", "PostMessage", "hwnd", $hWnd, "uint", $iMsg, "wparam", $iwParam, "lparam", $ilParam)
If @error Then Return SetError(@error, @extended, False)
Return $aResult
EndFunc 新手不会,下面继续! 感谢大家的支持
页:
[1]