0

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

我将此项目用于 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;
}
4

2 回答 2

0

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

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

于 2011-12-13T04:58:41.407 回答
0

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

windows钩子的奇怪行为

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

于 2012-09-25T14:17:58.877 回答