CallWndProc钩子没有接收到所有消息
本文关键字:消息 CallWndProc | 更新日期: 2023-09-27 18:11:14
我正在制作一个像Displayfusion这样的小工具,我需要一些钩子来接收消息,当Windows移动/激活/等,但是我卡住了。
我使用这个项目的CallWndProc钩子:http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx
对于几乎所有的windows,它工作得很好(x86和x64),但是在一些windows上,它似乎不能注入钩子DLL。目前,我在使用adobe reader x时遇到了问题。没有从该窗口收到任何消息。我想这和沙盒有关吧?有人能给我指个方向吗?
钩子的初始化代码:
bool InitializeCallWndProcHook(int threadID, HWND destination)
{
if (g_appInstance == NULL)
return false;
if (GetProp(GetDesktopWindow(), "WILSON_HOOK_HWND_CALLWNDPROC") != NULL)
SendNotifyMessage((HWND)GetProp(GetDesktopWindow(), "WILSON_HOOK_HWND_CALLWNDPROC"), RegisterWindowMessage("WILSON_HOOK_CALLWNDPROC_REPLACED"), 0, 0);
SetProp(GetDesktopWindow(), "WILSON_HOOK_HWND_CALLWNDPROC", destination);
hookCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProcHookCallback, g_appInstance, threadID);
return hookCallWndProc != NULL;
}
嗯,试试spy++是否能捕捉到这些消息。如果可以,那么显然这不是安全措施的问题。如果spy++不能,那么它几乎是不可能的。
看看这是否有效:同时使用WH_CALLWNDPROC和WH_GETMESSAGE钩子,因为显然,前者只捕获发送的消息,后者只捕获发布的消息。
我的应用程序中也有类似的问题。访问以下链接:
windows钩子的奇怪行为
我的猜测是,应用程序通过不调用CallNextHookEx
方法来中断过滤器函数链。注意,这只有在使用WH_CBT
钩子时才有可能。