我需要在应用程序启动之后和退出之前执行一些操作(某种使用 UMDH 的自动内存泄漏检测)。
我已经准备好 DLL,它被注入到所有进程中,并且在 DLL_PROCESS_ATTACH 上我正在执行我的第一个操作(就在应用程序启动之后)——所以我的这部分问题得到了解决。
问题在于第二部分 - 在进程即将退出时执行操作。
我已经在 DLL_PROCESS_DETACH 中尝试过,但这为时已晚,我需要早点挂钩。
使用 Windows Hooks 机制,我已经迷上了 WH_GETMESSAGE:
hhk = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC) &GetMsgProc, NULL , GetCurrentThreadId());
和 GetMsgProc() 函数:
LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if( nCode == HC_ACTION )
{
PMSG msg = (PMSG) lParam;
if( msg->message == WM_CLOSE )
{
OutputDebugString(L"WM_CLOSE");
}
if( msg->message == WM_QUIT )
{
OutputDebugString(L"WM_QUIT");
}
if( msg->message == WM_DESTROY )
{
OutputDebugString(L"WM_DESTROY");
}
}
return CallNextHookEx(hhk, nCode, wParam, lParam);
}
但是使用这种方法,我只检测到 WM_CLOSE 消息(当我将使用“X”按钮关闭应用程序时)。我不知道为什么我没有检测到 WM_QUIT 消息,从来没有。
任何想法,当应用程序即将退出时如何执行一些操作?
(我知道 Detours,但不能在我的项目中使用它们......)