Преобразовать символ в код виртуальной клавиши - PullRequest
3 голосов
/ 30 июня 2010

У меня есть строка значений, и я хочу смоделировать события нажатия клавиш в окне для каждого символа.

Я планирую отправить WM_KEYDOWN , WM_CHAR и WM_KEYUP событий в окне (поскольку это то, что, по-видимому, происходит при нажатии клавиши вручную).

Эти сообщения требуют, чтобы int отправлялся в wParam на основе таблицы коды виртуальных ключей .Я могу перебрать строку и получить каждый символ, но как мне взять этот символ и преобразовать его в значение, соответствующее коду виртуальной клавиши?Convert.ToInt32 () не работает.

Ответы [ 7 ]

10 голосов
/ 01 июля 2010

VkKeyScanEx Кто-нибудь?Согласно MSDN это:

"Преобразует символ в соответствующий код виртуальной клавиши и состояние сдвига."

(Вы также можете использовать VkKeyScan но помните, что он был заменен VkKeyScanEx.)

3 голосов
/ 30 июня 2010

Отправка WM_KEYDOWN / UP хлопотна. Само приложение уже переводит сообщение WM_KEYDOWN в WM_CHAR, используя состояние клавиш-модификаторов (Shift, Alt, Ctrl) и раскладку клавиатуры. Ни один из которых вы не можете контролировать, вы случайно получите неправильный символ.

Просто отправьте сообщения WM_CHAR, установите wparam в код символа. Не нужно беспокоиться о lparam, лишь немногие приложения используют его.

0 голосов
/ 30 июня 2010

Общим решением является использование SendMessage WinAPI. Эта ссылка описывает подпись SendMessage и предоставляет пример импорта.

Да, и для отображения кодов ВКонтакте следует использовать MapVirtualKey - лучше всего предположитьотображение произвольно и не логично.

0 голосов
/ 30 июня 2010

System.Windows.Forms.SendKeys - это класс WinForms со статическими методами для имитации ввода с клавиатуры в активном окне.

Подвох в том, что .NET не может фокусировать окна в другом приложении ( Документы SendKeys говорят о том, как это обойти).

0 голосов
/ 30 июня 2010

Вы можете использовать Input Simulator библиотека, которая обеспечивает API высокого уровня для имитации нажатия клавиш и обрабатывает все вещи низкого уровня.

0 голосов
/ 30 июня 2010

Вообще говоря, вместо прямой отправки WM_KEYDOWN, WM_CHAR и WM_KEYUP сообщений, вы должны использовать SendInput (предпочтительно) или, возможно, keybd_event (Устаревшее).

0 голосов
/ 30 июня 2010

Похоже, что он принимает символ ASCII и превращает его в гекс. Например, «A» в шестнадцатеричном формате - это 41. Согласно вашему графику, A - это 0x41, что является правильным (0x приводит к детонированию гексагона).

...