在Windows C++或C#中,您可以询问操作系统当前是否正在关闭/重新启动/注销
In Windows C++ or C# can you ask the OS if it is currently shutting down/restarting/logging off
我在关机期间遇到了一个问题。我有一段用C++编写的代码,它被封装在.dll中,并被注入到其他应用程序中。它做了很多事情,包括启动另一个用C#编写的应用程序(服务器)。
然而,在启动关闭后,c++代码会启动c#应用程序,因为它已被关闭杀死,而关闭会立即崩溃,因为系统即将关闭。
然后,一个错误框会停止关闭,直到用户处理它,这很烦人。有没有办法问操作系统,"嘿,你正在关闭/重新启动/注销吗?"这样我就不会启动应用程序了?我想双方都可以解决问题。
===编辑===
需要进一步澄清。作为注入的.dll运行的代码不能假设其注入的应用程序具有任何类型的"窗口"。此外,我想要一些我可以查询的东西,而不是一个我必须听的事件,因为我可能会因为时间原因错过那个事件。我想知道是否有任何一种功能可以有效地给我这样的
bool IsSystemShutting();
在这方面,C#选项和C++选项一样适用于我。但在.NET框架中,SystemEvents.SessionEnding和SystemEvents.Session Ended都是事件和属性。通常情况下,我会在活动发生后报名参加这个活动,所以这对我没有好处。
WM_ENDSESSION和WM_QUERYENDESSION消息适用于此场景。启动关闭、重新启动或注销过程时,Windows将向窗口发送这些窗口消息。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 是否可以在该用户注销后读取/打开用户密钥(HKEY_USERS中的密钥并以 s-1-5-21xxx 开头)
- 是否Q3ListView未能从Qt后台存储注销或代码是错误的
- 在Windows C++或C#中,您可以询问操作系统当前是否正在关闭/重新启动/注销