我试图弄清楚如何使用默认的IME(输入法引擎)(或其他任何输入法)使用AutoIt模拟按键。
例如,如果我将密钥作为Send("a")
发送到记事本,则应该使用当前设置的IME来获取密钥'a'上的字符。
同样,如果我发送密钥M,并且设置了IME印地语/马拉地语和Inscript键盘,我应该得到字母स。
目前,我收到的英文字母是M,而不是。
我的Autoit脚本如下
$myvar = "`1234567890-=\qwertyuiop[]asdfghjkl;'©zxcvbnm,./"
$charArray = StringSplit($myvar,"",2)
For $char in $charArray
Send( $char & "{ENTER}")
Next
有人可以告诉我如何在上述脚本中实现这一目标吗?
答案 0 :(得分:0)
我建议使用剪贴板:
ClipPut('string with national characters')
Ctrl+V
-Send('^v')
如果剪贴板不适合使用(例如菜单加速器或通过列表视图进行搜索),请告诉我们您到底想向其发送密钥-可能有办法。
答案 1 :(得分:0)
最后,我在Autoit论坛How Can I Find Non-English Characters' Key Code?上找到了这个问题的线索,在那里遇到了DllCall
函数调用。
所以现在我有以下函数调用
DllCall('user32.dll', 'int', 'keybd_event', 'int',$hChar, 'int', 0, 'int', 0, 'ptr', 0)
我可以用所需的键代码替换$ hChar的值。 例如,如果要使用Inscript Keyboard和Devanagari语言键入,,则应发送0x4D,这是键盘按键m的十六进制代码。
要将字符m转换为键代码0x4D,我们将必须为所有键盘键编写转换。
如果在调用此函数之前发送{SHIFTDOWN},我们可以获得具有相同键码的。
$hChar = "0x4D"
Send("{SHIFTDOWN}")
DllCall('user32.dll', 'int', 'keybd_event', 'int', $hChar, 'int', 0, 'int', 0, 'ptr', 0)
Send("{SHIFTUP}")
(要使用DllCall
,必须在Autoit脚本中包含WinAPI.au3。)