我正在制作像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;
}
答案 0 :(得分:0)
嗯,试试Spy ++是否可以捕获消息。如果可以,那么显然这不是安全措施的问题。然而,Spy ++不可能,那几乎是不可能的。
看看是否有效:使用WH_CALLWNDPROC和WH_GETMESSAGE挂钩,因为显然,前者仅捕获已发送的消息,而后者仅捕获已发布的消息。
答案 1 :(得分:0)
我的申请中有类似的问题。请访问以下链接:
Strange behaviour of windows hooks
我的猜测是应用程序通过不调用CallNextHookEx
方法来中断过滤器功能链。请注意,只有在使用WH_CBT
挂钩时才能实现此目的。