大家帮我看看这个钩子过程哪里出问题了,鼠标钩子,键盘钩子都可以,但就这个窗口钩子过程有问题。
1.调试时安装是成功的,钩子也收到消息了,但那个消息“((CWPSTRUCT *)lParam)->message”是有问题的,捕获不到WM_LBUTTONDOWN
HHOOK hHook=NULL;LRESULT CALLBACK HookCallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode <0)
return CallNextHookEx(hHook,nCode,wParam,lParam);
UINT message=((CWPSTRUCT *)lParam)->message;
switch(message)
{
case WM_LBUTTONDOWN:
{
//这里收不到消息
::MessageBox(NULL,TEXT("WM_LBUTTONDOWN"),NULL,MB_OK);
} break;
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}void SetHook()
{
hHook = SetWindowsHookEx(WH_CALLWNDPROC, HookCallWndProc, NULL,GetCurrentThreadId());
}void UnHook()
{
UnhookWindowsHookEx(hHook);
}
1.调试时安装是成功的,钩子也收到消息了,但那个消息“((CWPSTRUCT *)lParam)->message”是有问题的,捕获不到WM_LBUTTONDOWN
HHOOK hHook=NULL;LRESULT CALLBACK HookCallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode <0)
return CallNextHookEx(hHook,nCode,wParam,lParam);
UINT message=((CWPSTRUCT *)lParam)->message;
switch(message)
{
case WM_LBUTTONDOWN:
{
//这里收不到消息
::MessageBox(NULL,TEXT("WM_LBUTTONDOWN"),NULL,MB_OK);
} break;
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}void SetHook()
{
hHook = SetWindowsHookEx(WH_CALLWNDPROC, HookCallWndProc, NULL,GetCurrentThreadId());
}void UnHook()
{
UnhookWindowsHookEx(hHook);
}
上面所说的“发送消息”与“寄送消息”相对应,发送消息是SendMessage(),寄送消息是PoseMessage(),PostMessage把消息发送到程序的消息队列,而不是直接交给窗口过程WndProc。寄送的消息由窗口过程WndProc自动到消息队列中去取,用GetMessage()函数。
一般来说,键盘消息与鼠标消息都是通过PostMessge函数寄送到程序消息队列中的,所以楼主不明白的地主就在这里了。