JOURNALRECORDPROC确定按键

时间:2014-01-14 13:23:09

标签: c++ c windows hook journal

这是我的功能原型:

LRESULT CALLBACK JournalRecoProc(int code, WPARAM wParam, LPARAM lParam) {

}

如果点击了ENTER或鼠标按钮,我如何检查内部? 我想应该使用lParam,但我找不到。

1 个答案:

答案 0 :(得分:0)

作为MSDN says

  

如果挂钩过程返回 WM_KEYFIRST 范围内的消息    WM_KEYLAST ,以下条件适用:

     
      
  • EVENTMSG 结构的 paramL 成员指定所按键的虚拟键码。
  •   
  • EVENTMSG 结构的 paramH 成员指定扫描代码。
  •   
  • 无法指定重复计数。该事件始终用于表示一个关键事件。
  •   

所以,你可以这样访问它:

LRESULT CALLBACK JournalPlaybackProc(int code, WPARAM wParam, LPARAM lParam)
{
    // ... blah blah ...

    if (code == HC_GETNEXT)
    {
        // examine eventmsg
        EVENTMSG *pEvent = (EVENTMSG*)lParam;

        // keypress
        if (pEvent->message >= WM_KEYFIRST &&
            pEvent->message <= WM_KEYLAST)
        {
            // decode key press
            unsigned int uVirtualKeyCode = pEvent->paramL;
            unsigned int uScanCode = pEvent->paramH;

            // do your conditional checks here
            if (uVirtualKeyCode == VK_ENTER)
            {
                // Enter key was pressed
            }
        }
        else if (pEvent->message == WM_LBUTTONDOWN)
        {
            // left mouse click
        }
        else // ... add checks for other messages ....
    }

    // ... blah blah ...
}