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

时间:2016-12-23 06:47:25

标签: c++ winapi events detect

基本上标题说我需要在我的程序结束时检测到,就像某人点击任务管理器中的结束任务或其他什么时一样。任何人都可以指出我用某个例子或其他东西来处理这种事件吗?感谢您给予的任何帮助

2 个答案:

答案 0 :(得分:2)

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

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

进程和线程的句柄在很多方面看起来像Windows事件句柄。一旦这个过程或线程完成,它们就会发出信号。

答案 1 :(得分:0)

这取决于您的应用的终止方式以及应用的类型。

对于具有UI的应用:

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

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

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

对于所有类型的应用,如果应用通过TerminateProcess功能被另一个进程强制终止,there is no way to get notified

  

如果进程被TerminateProcess终止,则进程的所有线程立即终止,无法运行其他代码。这意味着线程不会在终止处理程序块中执行代码。此外,没有附加的DLL通知进程正在分离。