【发布时间】:2010-05-27 22:20:49
【问题描述】:
我想设置全局挂钩来跟踪哪个应用程序处于活动状态。
在我的主程序中,我正在执行以下操作:
HMODULE mod=::GetModuleHandle(L"HookProcDll");
HHOOK rslt=(WH_CALLWNDPROCRET,MyCallWndRetProc,mod,0);
名为MyCallWndRetProc 的挂钩过程存在于名为HookProcDll.dll 的单独dll 中。钩子程序正在监视WM_ACTIVATE 消息。
问题是代码卡在我设置挂钩的行中,即在我调用 ::SetWindowsHookEx 的行中。然后 Windows 没有响应,我的任务栏消失了,我的桌面是空的。然后我必须重置计算机。
做错了什么,为什么 Windows 没有响应?和 我是否需要在每个进程中注入 HookProcDll.dll 才能设置全局挂钩,我该怎么做?
【问题讨论】:
-
我认为您在第二行中缺少函数名称。而且你没有发布最重要的代码:
SetWindowsHookEx调用和你的钩子过程。 -
我认为 HHOOK rslt=(..) 应该是 HHOOK rslt=SetWindowsHookEx(...);
-
您已经在每个进程中注入了 DLL。这是问题所在,您正在使每个 GUI 应用程序崩溃,包括 Windows 资源管理器。先把它注入你自己的,这样你就可以调试它了。