【问题标题】:What can i do with this Win32 hooks problem?我可以用这个 Win32 钩子问题做什么?
【发布时间】:2021-06-30 21:20:44
【问题描述】:

我想了解一些有关 Windows Hooks 的知识。现在,我只对“捕捉”消息感兴趣。 所以我做了以下,但它不起作用。

我想在我正在使用的同一个线程中捕获消息。我不想捕获其他线程的消息。

有人可以向我解释我做错了什么吗?

我按如下方式安装钩子:

myhookdata.nType = WH_GETMESSAGE;
myhookdata.hkprc = GetMsgProc; 
myhookdata.hhook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, NULL, GetCurrentThreadId());

然后在钩子程序中我这样做,只是为了测试。但是“WM_LBUTTONDOWN”永远不会被抓住!!

LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    LPCWPSTRUCT message = (LPCWPSTRUCT)lParam;

    if (nCode < 0)
        return CallNextHookEx(myhookdata.hhook, nCode,
            wParam, lParam);

    switch (nCode)
    {
    case HC_ACTION:
        if (wParam)
            if (message->message == WM_LBUTTONDOWN)
                Sleep(0);
        break;

    default:
        break;
    }
    return CallNextHookEx(myhookdata.hhook, nCode, wParam, lParam);
}

【问题讨论】:

  • lParam 指向WH_GETMESSAGE 内部的MSG,而不是CWPSTRUCT
  • CWPSTRUCT 用于WH_CALLWNDPROC,而不是WH_GETMESSAGERead the documentation.

标签: c++ winapi hook


【解决方案1】:

根据documentation

lParam [in]

类型:LPARAM

指向包含消息详细信息的 MSG 结构的指针。

所以你只需要更改代码:

PMSG message = (PMSG)lParam;

然后它对我有用。

【讨论】:

  • 嗨,这个答案能解决你的问题吗?如果您有任何问题,请随时告诉我,如果有帮助也请接受。
猜你喜欢
  • 2011-02-25
  • 2012-02-14
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多