【发布时间】: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_GETMESSAGE。 Read the documentation.