CallWndProc挂钩没有收到所有消息

时间:2011-10-13 13:09:15

标签: c# hook setwindowshookex

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

我正在将此项目用于CallWndProc钩子: http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx

对于几乎所有的窗口它都很好用(x86和x64),但是在某些窗口上它似乎无法注入钩子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;
}

2 个答案:

答案 0 :(得分:0)

嗯,试试Spy ++是否可以捕获消息。如果可以,那么显然这不是安全措施的问题。然而,Spy ++不可能,那几乎是不可能的。

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

答案 1 :(得分:0)

我的申请中有类似的问题。请访问以下链接:

Strange behaviour of windows hooks

我的猜测是应用程序通过不调用CallNextHookEx方法来中断过滤器功能链。请注意,只有在使用WH_CBT挂钩时才能实现此目的。