我需要在應用程序啓動後立即執行一些操作,並在其退出之前(某種使用UMDH的自動內存泄漏檢測)。掛鉤到窗口進程
我已經準備好了注入到所有進程和DLL_PROCESS_ATTACH的DLL我正在執行我的第一個操作(剛剛在應用程序啓動之後) - 所以我的問題的這部分已經解決了。
問題出在第二部分 - 在進程即將退出時執行操作。
我已經在DLL_PROCESS_DETACH中試過了,但是這個太晚了,我需要早點掛鉤。
使用windows鉤子機制,我已經迷上了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消息,從來沒有。
任何想法,如何在應用程序即將退出時執行一些操作?
(我知道少走彎路,但在我的項目不能使用它們...)
有你的鉤子DLL勾'DLL_PROCESS_ATTACH'階段'ExitProcess'功能。 – Jay 2012-07-25 23:12:29
如何設置鉤子到ExitProcess函數? – dzima 2012-07-26 13:50:02