0

I am working with a WPF application sending keys to a game. I opened spy++ to observer s as a key press on the keyboard. I then press my button on the application and I noticed a different scan code in spy++ messages. Could this be somthing to do with Windows 7 64bit? Partial listing:

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)));

The image shows when I use my code to send a key I receive ScanCode:00fExtended from spy++ message output. When I actually press the same key I receive ScanCode:1FfExtended. Everything else is identical.

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

4

2 回答 2

1

您需要在 00 和 fExtended 之间留一个空格,实际短语是“ScanCode:00”后跟“fExtended:0”

扫描代码为 0 并不奇怪,您在代码中将其设置为 0:

 down.Data.Keyboard.Scan = 0;

这应该不会造成麻烦,仅在虚拟键不明确时才使用扫描码。以左右 Shift 键为例。如果您愿意,可以使用 MapVirtualKey()。

于 2010-03-26T11:32:58.290 回答
0

根据 MSDN 文档WM_KEYDOWN,扫描码值取决于 OEM。

特别是,您的键盘可能不是英文/美式键盘。F Lock或者您可以打开任何非标准切换键(如)。玩这些,看看更改这些是否会对扫描码产生任何影响。

于 2010-03-26T06:30:21.420 回答