我想设置全局挂钩来跟踪哪个应用程序处于 Activity 状态。
在我的主程序中,我正在做以下事情:
HMODULE mod=::GetModuleHandle(L"HookProcDll");
HHOOK rslt=(WH_CALLWNDPROCRET,MyCallWndRetProc,mod,0);
名为
MyCallWndRetProc
的挂钩过程存在于名为HookProcDll.dll的单独的dll中。挂钩过程正在监视WM_ACTIVATE
消息。问题是代码卡在我设置钩子(Hook)的行中,即卡在我调用
::SetWindowsHookEx
的行中。然后Windows变得无响应,我的任务栏消失了,我的桌面空白了。然后,我必须重置计算机。怎么了,为什么Windows无法响应?和
我是否需要在每个进程中注入(inject)HookProcDll.dll才能设置全局挂钩,我该怎么做?
最佳答案
这几乎绝对听起来像是MyCallWndRetProc中的崩溃错误。您指定要在每个进程的窗口中加载的钩子(Hook)DLL,当在窗口消息后调用MyCallWndRetProc时,它将崩溃。由于在每个进程中的每个窗口消息之后都会调用它,因此最终它将关闭在用户 session 中显示UI的每个进程。您甚至无法启动新应用,因为您的hook proc将立即加载到它们中。
包括MyCallWndRetProc的代码,也许还有您的DllMain,都应该使我们对正在发生的事情有一些了解。