1

私のフック手順(キーボードの場合)では、右Altをクリックすると、プレス時に2つのコードが送信され、リリース時に2つのコードが送信されます。

コード:

LRESULT CALLBACK Recorder::keyboardHookProcedure( int code, WPARAM wParam, LPARAM lParam ) {
    if( code < 0 )
        return CallNextHookEx( m_mouseHook, code, wParam, lParam );   

    DWORD _vkCode = reinterpret_cast<KBDLLHOOKSTRUCT*>( lParam )->vkCode;

    qDebug( "vkCode: %d, wparam: %d, lparam: %d", _vkCode, wParam, lParam );

    return CallNextHookEx( 0, code, wParam, lParam );
}

押すと

vkCode: 162, wparam: 260, lparam: 3398032
vkCode: 165, wparam: 260, lparam: 3398032

リリース時に

vkCode: 162, wparam: 257, lparam: 3398032
vkCode: 165, wparam: 257, lparam: 3398032

さらに、キーを押すとWM_SYSKEYDOWN(260)として送信されますが、離すとwParamはWM_KEYUP(257)であることに注意してください。なに…?なぜそれがそのように機能するのですか?

4

1 に答える 1

4

これは、右の Alt キー (ALT-GR) が 2 つのキー (ALT と CTRL) のショートカットであるためです。

WM_SYSKEYDOWN を取得しますが、WM_KEYUP を取得するのは、メッセージがそのように定義されているためです。米国/ライブラリ/ウィンドウ/デスクトップ/ms646287(v=vs.85).aspx

于 2012-09-03T18:40:40.300 に答える