0

Windows 7 でコンソールのキープレス イベントを処理しようとしています。左の Ctrl キーを押すと、コード 0x0008 (0b00001000 - LEFT_CTRL_PRESSED) が返されると予想されますが、代わりに 0x0028 (0b00101000) が返されます。 )。

...
DWORD n;
INPUT_RECORD ir;
HANDLE hin;
hin = GetStdHandler(STD_INPUT_HANDLE);
...
ReadConsoleInput(hin, &ir, 1, &n)...
...
if(ir.Event.KeyEvent.dwControlKeyState == LEFT_CTRL_PRESSED) {
// some code..
}

xor 32を使用するとすべて正常に動作する場合:

if((ir.Event.KeyEvent.dwControlKeyState ^ 32) == LEFT_CTRL_PRESSED) {
// some code..
}

余分なビットはどこにありましたか?

ps: ユニコードのプロジェクト

4

2 に答える 2

1

dwControlKeyStateビットマップです。

の単一ビットは、dwControlKeyState特定のキーの状態を同時に記述します。

3 番目 (0 インデックス) のビットは 0x008 に等しく、左 ctrl キーが押されたことを示します。

それをテストするには、次のようにします。

if (ir.Event.KeyEvent.dwControlKeyState & LEFT_CTRL_PRESSED) {
// some code..
}

このビットマップの完全な説明については、 http dwControlKeyState: //msdn.microsoft.com/en-us/library/windows/desktop/ms684166%28v=vs.85%29.aspxを参照してください。

于 2013-09-09T17:01:55.253 に答える