Windows 7 x64上的SendInput扫描代码

时间:2010-03-26 05:55:16

标签: c# windows-7 windows-7-x64 sendinput

我正在使用WPF应用程序向游戏发送密钥。我把间谍++打开到观察者的键盘按键上。然后我按下应用程序上的按钮,我发现间谍++消息中有不同的扫描代码。这可能与Windows 7 64bit有关吗? 部分列表:

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 from spy ++ message output。当我实际按下相同的键时,我收到了ScanCode:1FfExtended。其他一切都是一样的。

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

2 个答案:

答案 0 :(得分:1)

你需要在00和fExtended之间精神上放置一个空格,实际的短语是“ScanCode:00”,然后是“fExtended:0”

扫描代码为0并不令人惊讶,您在代码中将其设置为0:

 down.Data.Keyboard.Scan = 0;

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

答案 1 :(得分:0)

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

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