1

这是我的函数的原型:

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

}

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

4

1 回答 1

0

正如MSDN 所说

如果挂钩过程返回WM_KEYFIRSTWM_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 ...
}
于 2014-01-14T14:11:52.177 回答