0

ゲームにキーを送信する WPF アプリケーションを使用しています。キーボードのキーを押すと、オブザーバー s に spy++ を開きました。次に、アプリケーションのボタンを押すと、spy++ メッセージに別のスキャン コードがあることに気付きました。これは 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)));

画像は、コードを使用してキーを送信するときに表示され、spy++ メッセージ出力から ScanCode:00fExtended を受け取ります。実際に同じキーを押すと、ScanCode:1FfExtended が表示されます。他のすべては同じです。

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 に答える