Конвертировать KeyEventArgs в структуру KEYDBINPUT - PullRequest
2 голосов
/ 10 декабря 2010

Я работаю в сетевой системе (в C #), где на одном компьютере я получаю ввод с клавиатуры через ловушку низкого уровня, а затем передаю ввод на другой компьютер, где он должен быть введен.

Хук доставляет ввод с клавиатуры в классе KeyEventArgs. Чтобы внедрить его в целевой компьютер, мне нужно использовать структуру KEYBDINPUT с SendInput.

Кажется, что между KeyEventArgs.KeyCode или KeyValue нет простого совпадения KEYBDINPUT.wVk и wScan. Я также пробовал MapVirtualKey в некоторых комбинациях.

В качестве альтернативы, я мог бы преобразовать KeyEventArgs в сообщения ключа Windows (WM_KEYUP / DOWN с wParam и lParam) на исходном компьютере, но я столкнулся с аналогичными трудностями.

Кто-нибудь здесь может помочь с любым сценарием?

1 Ответ

0 голосов
/ 30 апреля 2012

Возможно, вы захотите взглянуть на недавний ответ здесь , где я предлагаю использовать InputSimulator в качестве альтернативы другой работе низкого уровня. При этом используется Win32 SendInput API напрямую.

Здесь используется VirtualKeyCode, поэтому, поскольку у вас есть KeyEventArgs, вы можете просто использовать свойство KeyValue:

InputSimulator.SimulateKeyPress (keyEventArgs.KeyValue);

Если у вас есть только System.Key, вы можете преобразовать в VirtualKey

http://msdn.microsoft.com/en-us/library/system.windows.input.keyinterop.virtualkeyfromkey.aspx

Как конвертировать 'System.Windows.Input.Key' в 'System.Windows.Forms.Keys'?

...