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

Ult*_*nks 6 c# c++ shutdown restart logout

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

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

然后一个错误框停止关闭,直到用户处理它,这很烦人.有没有办法问操作系统,"嘿,你关闭/重启/退出了吗?" 所以当发生这种情况时,我不会启动应用程序?我想两端的解决方案都没问题.

== 编辑 ==

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

bool IsSystemShutting();
Run Code Online (Sandbox Code Playgroud)

在这方面,C#选项对我和C++选项都有用.但是在.NET框架中,SystemEvents.SessionEndingSystemEvents.SessionEnded都是事件与属性.我经常会在事件发生后报名参加此次活动,所以这对我来说没有好处.

sya*_*ani 4

WM_ENDSESSION和WM_QUERYENDSESSION消息适用于这种情况当启动关闭、重新启动或注销过程时,Windows 会将这些窗口消息发送到窗口。