在Windows C++或C#中,您可以询问操作系统当前是否正在关闭/重新启动/注销

本文关键字:是否 注销 重新启动 操作系统 C++ Windows | 更新日期: 2023-09-27 17:58:04

我在关机期间遇到了一个问题。我有一段用C++编写的代码,它被封装在.dll中,并被注入到其他应用程序中。它做了很多事情,包括启动另一个用C#编写的应用程序(服务器)。

然而,在启动关闭后,c++代码会启动c#应用程序,因为它已被关闭杀死,而关闭会立即崩溃,因为系统即将关闭。

然后,一个错误框会停止关闭,直到用户处理它,这很烦人。有没有办法问操作系统,"嘿,你正在关闭/重新启动/注销吗?"这样我就不会启动应用程序了?我想双方都可以解决问题。

===编辑===

需要进一步澄清。作为注入的.dll运行的代码不能假设其注入的应用程序具有任何类型的"窗口"。此外,我想要一些我可以查询的东西,而不是一个我必须听的事件,因为我可能会因为时间原因错过那个事件。我想知道是否有任何一种功能可以有效地给我这样的

bool IsSystemShutting();

在这方面,C#选项和C++选项一样适用于我。但在.NET框架中,SystemEvents.SessionEnding和SystemEvents.Session Ended都是事件和属性。通常情况下,我会在活动发生后报名参加这个活动,所以这对我没有好处。

在Windows C++或C#中,您可以询问操作系统当前是否正在关闭/重新启动/注销

WM_ENDSESSION和WM_QUERYENDESSION消息适用于此场景。启动关闭、重新启动或注销过程时,Windows将向窗口发送这些窗口消息。