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;
}

CallWndProc钩子没有接收到所有消息

嗯,试试spy++是否能捕捉到这些消息。如果可以,那么显然这不是安全措施的问题。如果spy++不能,那么它几乎是不可能的。

看看这是否有效:同时使用WH_CALLWNDPROC和WH_GETMESSAGE钩子,因为显然,前者只捕获发送的消息,后者只捕获发布的消息。

我的应用程序中也有类似的问题。访问以下链接:

windows钩子的奇怪行为

我的猜测是,应用程序通过不调用CallNextHookEx方法来中断过滤器函数链。注意,这只有在使用WH_CBT钩子时才有可能。