2012-09-03 84 views
1

在我的鉤子程序(鍵盤)當我點擊右Alt時會發送按我兩碼和兩個上發佈:右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)。什麼......?它爲什麼這樣工作?

回答

3

這是因爲右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

+0

這很容易...... xD,但是問題的第二部分呢?爲什麼按下這個鍵作爲系統鍵並作爲普通鍵釋放? – tobi

+0

另一個問題,爲什麼然後ALT-GR + DEL不顯示任務管理器? – tobi

+0

Alt-gr Del與ctrl-alt-del(更多)不同,因爲它的處理級別低於普通組合鍵。它曾經習慣於IIRC – podiluska