Как использовать AutiIt для имитации нажатий клавиш, используя AutoIt для IME, кроме английского - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь выяснить, как имитировать нажатие клавиши с AutoIt, используя IME по умолчанию (Механизм метода ввода) для Indic (или любого другого метода ввода).

Например, и если я отправляю ключ как Send("a")в Блокнот, я должен получить символ, который находится на клавише «а», используя IME, установленный в настоящее время.Опять же, если я отправлю ключ M, я должен получить письмо स, если установлен язык хинди / маратхи IME и клавиатура Inscript.

В настоящее время я получаю ту же самую английскую букву M вместо स.

My AutoitСценарий выглядит следующим образом

$myvar = "`1234567890-=\qwertyuiop[]asdfghjkl;'©zxcvbnm,./"
$charArray = StringSplit($myvar,"",2)
For $char in $charArray
    Send( $char & "{ENTER}")
Next

Может кто-нибудь сказать мне, как добиться этого в приведенном выше сценарии?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Наконец я получил подсказку об этой проблеме на форуме Autoit. Как я могу найти код ключа не английских символов? , там я наткнулся на вызов функции DllCall.

Итактеперь у меня есть следующий вызов функции

DllCall('user32.dll', 'int', 'keybd_event', 'int',$hChar, 'int', 0, 'int', 0, 'ptr', 0)

Я могу заменить значение $ hChar требуемым кодом ключа.Например, если я хочу напечатать स с помощью Inscript Keyboard и языка деванагари, я должен отправить 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, мы должны включить WinAPI.au3 в наш Autoitскрипт.)

0 голосов
/ 09 декабря 2018

Я предлагаю использовать буфер обмена:

  • вызовите ClipPut('string with national characters')
  • и затем смоделируйте Ctrl+V - Send('^v')

Если буфер обмена неподходящий (как в случае с ускорителями меню или поиском по списку), пожалуйста, сообщите нам, на что именно вы пытаетесь отправить ключи - может быть, есть способ.

...