Код сканирования SendInput в Windows 7 x64 - PullRequest
0 голосов
/ 26 марта 2010

Я работаю с приложением WPF, отправляя ключи в игру. Я открыл Spy ++ для наблюдателя, как нажатие клавиши на клавиатуре. Затем я нажимаю кнопку в приложении и замечаю другой код сканирования в сообщениях spy ++. Может ли это быть что-то делать с 64-битной Windows 7? Частичный листинг:

var down = new INPUT();
down.Type = (UInt32)InputType.KEYBOARD;
down.Data.Keyboard = new KEYBDINPUT();
down.Data.Keyboard.Vk = (UInt16)keyCode;
down.Data.Keyboard.Scan = 0;
down.Data.Keyboard.Flags = 0;
down.Data.Keyboard.Time = 0;
down.Data.Keyboard.ExtraInfo = IntPtr.Zero;
//down.Data.Keyboard.ExtraInfo = GetMessageExtraInfo();

var up = new INPUT();
up.Type = (UInt32)InputType.KEYBOARD;
up.Data.Keyboard = new KEYBDINPUT();
up.Data.Keyboard.Vk = (UInt16)keyCode;
up.Data.Keyboard.Scan = 0;
up.Data.Keyboard.Flags = (UInt32)KeyboardFlag.KEYUP;
up.Data.Keyboard.Time = 0;
up.Data.Keyboard.ExtraInfo = IntPtr.Zero;
//up.Data.Keyboard.ExtraInfo = GetMessageExtraInfo();

INPUT[] inputList = new INPUT[2];
inputList[0] = down;
inputList[1] = up;

var numberOfSuccessfulSimulatedInputs = SendInput(2, inputList, Marshal.SizeOf(typeof(INPUT)));

На рисунке показано, что когда я использую свой код для отправки ключа, я получаю ScanCode: 00fExtended из сообщения spy ++. Когда я нажимаю ту же клавишу, я получаю ScanCode: 1FfExtended. Все остальное идентично.

http://spilmansoftware.com/images/scancode.gif http://spilmansoftware.com/images/scancode.gif

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Вам нужно мысленно поставить пробел между 00 и fExtended, фактическая фраза «ScanCode: 00», за которой следует «fExtended: 0»

То, что код сканирования равен 0, неудивительно, вы установили его на 0 в своем коде:

 down.Data.Keyboard.Scan = 0;

Это не должно вызывать проблем, код сканирования используется только тогда, когда виртуальный ключ неоднозначен. Например, левая и правая клавиши Shift. Вы можете использовать MapVirtualKey (), если хотите.

0 голосов
/ 26 марта 2010

В соответствии с документацией MSDN для WM_KEYDOWN значение кода сканирования зависит от производителя.

В частности, возможно, что ваша клавиатура не является английской / американской клавиатурой. Или вы можете включить любые нестандартные тумблеры (например, F Lock). Поиграйте с ними и посмотрите, повлияет ли их изменение на код сканирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...