【发布时间】: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 事件挂钩?