簡體   English   中英

如何檢測我的Windows應用程序是否已結束?

[英]How to detect if my Windows application has ended?

基本上,標題說的是我需要檢測程序何時結束(例如有人單擊任務管理器中的結束任務或諸如此類)。 誰能指出我通過某種例子來處理此類事件的事件嗎? 感謝您提供的任何幫助

您需要打開此過程。 這樣,您將檢索其句柄。 之后,您可以簡單地等待此句柄。

HANDLE h = OpenProcess(....);
WaitForSingleObject(h);

進程和線程的處理在許多方面都類似於Windows事件處理。 一旦該過程或線程完成,就會發出信號。

這取決於您的應用如何終止以及它是什么類型的應用。

對於具有UI的應用程序:

  • 如果用戶單擊任務管理器中的“結束任務”,您實際上將收到WM_DESTROY甚至WM_CLOSE消息到您的消息處理程序。
  • 如果用戶僅單擊應用程序的X按鈕,則顯然上述內容同樣適用。
  • 如果用戶注銷或關閉PC,您將收到WM_QUERYENDSESSION和WM_ENDSESSION消息。

對於控制台應用程序,您可以使用SetConsoleCtrlHandler函數來通知大多數應用程序終止情況(我對此沒有任何經驗,因此無法提供很多詳細信息)。

對於服務,可以以幾乎相同的方式使用RegisterServiceCtrlHandler函數。

對於所有類型的應用程序,如果該應用程序通過TerminateProcess函數被另一個進程強行終止, 則無法獲得通知

如果某個進程被TerminateProcess終止,則該進程的所有線程將立即終止,而沒有機會運行其他代碼。 這意味着線程不執行終止處理程序塊中的代碼。 此外,沒有附加的DLL通知該進程正在分離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM