C# CallWndProc钩子未接收所有消息

C# CallWndProc钩子未接收所有消息,c#,hook,setwindowshookex,C#,Hook,Setwindowshookex,我正在制作一个像Displayfusion这样的小工具,我需要一些钩子来在Windows移动/激活/等时接收消息,但是我被卡住了 我将此项目用于CallWndProc挂钩: 对于几乎所有的windows来说,它在x86和x64上都工作得很好,但是在某些windows上,它似乎无法注入钩子DLL。目前我在adobe reader X上遇到问题。没有收到来自该窗口的消息。我想这和沙箱有关吧?谁能帮我往正确的方向推一下吗 钩子的初始化代码: bool InitializeCallWndProcHoo

我正在制作一个像Displayfusion这样的小工具,我需要一些钩子来在Windows移动/激活/等时接收消息,但是我被卡住了

我将此项目用于CallWndProc挂钩:

对于几乎所有的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++是否能捕获消息。如果可以的话,那么显然这不是安全措施的问题。然而,这是不可能的,那么这几乎是不可能的


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

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


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

Adobe是一家非常担心安全性的公司。Flash是显而易见的,但Reader也不例外,因为它可以显示阻止复制/粘贴的文档。您需要与他们联系以获得支持。我刚刚用Spy++试用过,Spy++可以从adobe reader X接收消息。我会在有空闲时间时尝试WH_CALLWNDPROC和WH_GETMESSAGE钩子。嗯,如果Outlook与我的CBT钩子一起工作,我今天晚些时候会尝试。另一种方法也可以是此Shell挂钩:。Windows任务栏也使用此挂钩。