右ALT发送两个虚拟键码

时间:2012-09-03 18:36:01

标签: c++ winapi hook

在我的勾选程序(用于键盘)中,当我点击右键时,它会在发送时向我发送两个代码,在发布时发送两个代码:

代码:

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)。什么......?为什么它以这种方式运作?

1 个答案:

答案 0 :(得分:4)

这是因为右侧的Alt键(ALT-GR)是两个键的快捷键 - ALT和CTRL

你得WM_SYSKEYDOWN但WM_KEYUP因为消息是如何定义的 - 如果你期望WM_SYSKEYUP,当你释放一个与ALT键一起按下的键时,你就会得到它 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms646287(v=vs.85).aspx