如何检测我的Windows应用程序是否已经结束

How to detect if my Windows application has ended?

本文关键字:是否 应用程序 结束 Windows 我的 何检测 检测      更新时间:2023-10-16

基本上,标题所说的我需要检测到我的程序何时结束,例如某人在任务管理器或其他内容中单击最终任务。谁能将我指向以例子或其他方式处理此事的某种事件?感谢给出的任何帮助

您需要打开此过程。这样,您将检索其手柄。之后,您可以简单地等待此手柄。

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

在许多方面,过程和线程的操作看起来像Windows事件手柄。此过程或线程完成后,它们就会发出信号。

这取决于您的应用程序的终止方式以及它是什么类型的应用程序。

用于使用UI的应用程序:

  • 如果用户在任务管理器中单击"结束任务",您实际上将接收WM_DESTROY甚至WM_CLOSE消息到您的消息处理程序。
  • 如果用户只需单击应用程序的X按钮,显然上述也适用。
  • 如果用户注销或关闭PC,您将收到wm_queryendsession和wm_endsession消息。

对于控制台应用程序,您可以使用setConsolectrlhandler函数通知大多数应用程序终止情况(我没有任何经验,因此无法提供很多详细信息)。

对于服务,您可以以几乎相同的方式使用registerservicectrlhandler函数。

对于所有类型的应用程序,如果应用程序通过终止程序函数强行终止了该应用程序,则无法通知应用程序:

如果一个过程通过终止程序终止,则该过程的所有线程将立即终止,而无需运行其他代码。这意味着线程不会在终止处理程序块中执行代码。另外,没有任何附着的DLL通知该过程已分离。