我正试图弄清楚如何使用Indic(或任何其他输入法(的默认IME(输入法引擎(来模拟AutoIt的击键。
例如,如果我将键作为Send("a")
发送到记事本,我应该使用当前设置的IME在键"a"上获得一个字符。再次,如果我发送密钥M,我应该会收到信件स如果设置了IME印地语/马拉地语和手写体键盘。
目前我收到的是相同的英文字母M,而不是स.
我的Autoit脚本如下
$myvar = "`1234567890-=qwertyuiop[]asdfghjkl;'©zxcvbnm,./"
$charArray = StringSplit($myvar,"",2)
For $char in $charArray
Send( $char & "{ENTER}")
Next
有人能告诉我如何在上面的脚本中实现这一点吗?
我建议使用剪贴板:
- 调用
ClipPut('string with national characters')
- 然后模拟
Ctrl+V
-Send('^v')
如果剪贴板不合适(如菜单快捷键或通过列表视图搜索(,请告诉我们您到底想把密钥发送到什么位置-可能有办法。
我终于在Autoit的论坛上找到了这个问题的线索——我如何找到非英语字符的密钥码?,在那里我遇到了DllCall
函数调用。
所以现在我有下面的函数调用
DllCall('user32.dll', 'int', 'keybd_event', 'int',$hChar, 'int', 0, 'int', 0, 'ptr', 0)
我可以用所需的密钥代码替换$hChar的值。例如,如果我想键入स使用手写体键盘和天成文书语言,我应该发送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。(