【问题标题】:Unable to call the GetMsgPrc using the WH_GETMESSAGE hook无法使用 WH_GETMESSAGE 挂钩调用 GetMsgPrc
【发布时间】:2017-10-11 16:11:10
【问题描述】:

我正在尝试在钩子过程 GetMsgProc 中打印一条消息,如下面的代码中所述:

LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    printf("inside hook proc");

    return CallNextHookEx(getmsghook, nCode, wParam, lParam);
}


void main()
{
    HINSTANCE hins;
    hins = GetModuleHandle(NULL);
    getmsghook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC) GetMsgProc, hins, 0);

    MSG message;
    while (GetMessage(&message, NULL, 0, 0))
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }

    UnhookWindowsHookEx(getmsghook);
}

//--------------------------------------------- --------------

我的猜测是,对于每个键盘或鼠标输入,都应该打印该消息。但我无法弄清楚为什么没有发生这种情况。你能帮忙吗?

【问题讨论】:

  • 如果我没记错的话,那个钩子只会捕获发送到窗口句柄的消息。
  • @500-InternalServerError:不一定。如果我用 WH_MOUSE_LL 替换 WH_GETMESSSAGE,它可以工作。
  • @500-InternalServerError。 WH_GETMESSAGE 捕获任何通过 (Peek|Get)Message() 的消息,无论是发布、发送、广播等。您可能会想到 WH_CALLWNDPROC/RET,它捕获任何发送到窗口的消息。
  • @RemyLebeau:这有点脱离上述问题的背景。 WH_CALLWNDPROC 是否与 Internet Explorer 中发生的 Touch 事件挂钩?

标签: windows winapi hook


【解决方案1】:

全局挂钩必须在 .DLL 中实现,唯一的例外是低级键盘和鼠标挂钩。查看SetWindowsHookEx的返回值,应该是NULL。

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多