アプリケーションの起動直後と終了直前にいくつかの操作を実行する必要があります (UMDH を使用したある種の自動メモリ リーク検出)。
すべてのプロセスに挿入される DLL を準備し、DLL_PROCESS_ATTACH で最初の操作を実行しています (アプリケーションの起動直後)。これで、問題のこの部分は解決されました。
問題は 2 番目の部分にあります。プロセスが終了しようとしているときに操作を実行します。
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 メッセージを検出しない理由がわかりません。
アプリケーションが終了しようとしているときにいくつかの操作を実行する方法はありますか?
(私は回り道について知っていますが、私のプロジェクトでは使用できません...)