1

在我的钩子程序(用于键盘)中,当我单击右 alt 时,它会在按下时向我发送两个代码,在释放时发送两个代码:

编码:

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) 是两个键的快捷方式 - ALT 和 CTRL

你得到 WM_SYSKEYDOWN 但 WM_KEYUP 因为这是定义消息的方式 - 如果你期待 WM_SYSKEYUP,当你释放与 ALT 键一起按下的键时,你会得到 - http://msdn.microsoft.com/en-我们/图书馆/windows/desktop/ms646287(v=vs.85).aspx

于 2012-09-03T18:40:40.300 回答