如何使用 AutiIt 为非英语输入法使用 AutoIt 模拟击键

How to use AutiIt to simulate Keystrokes using AutoIt for IME other than English

我正在尝试弄清楚如何使用印度语(或任何其他输入法)的默认 IME(输入法引擎)使用 AutoIt 模拟击键。

例如,如果我将密钥作为 Send("a") 发送到记事本,我应该使用当前设置的 IME 获取密钥 'a' 上的字符。 同样,如果我发送键 M,如果设置了 IME Hindi/Marathi 语言和 Inscript 键盘,我应该会收到字母 स。

目前我得到的是相同的英文字母 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 的论坛 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 键盘和梵文语言键入 स,我应该发送 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。)