为了账号安全,请及时绑定邮箱和手机立即绑定

如何检测Windows关闭或注销

/ 猿问

如何检测Windows关闭或注销

jeck猫 2019-11-14 15:13:06

我需要检测Windows是何时关闭(或重新启动)或用户何时注销。我需要在关闭应用程序之前正确关闭该应用程序。我注意到Windows关闭当天没有引发退出应用程序事件。


我阅读了《C#中是否有办法检测Windows关闭/注销并取消该操作(在询问用户之后)


但是我不确定在关闭之前应该在哪里执行操作。谢谢。


查看完整描述

3 回答

?
胡说叔叔

将事件处理程序方法附加到SystemEvents.SessionEndingevent,并且每次引发事件时都会调用您的处理程序方法。如果需要,处理此事件将使您可以取消挂起的注销或关闭。(尽管实际上并不能像在当前操作系统中那样运行;有关更多信息,请参见此处的MSDN文档。)


如果您不想取消该事件,而只是对其做出适当的反应,则应该处理该SystemEvents.SessionEnded事件。


但是,必须确保在关闭应用程序时分离事件处理程序,因为这两个都是静态事件。


查看完整回答
反对 回复 2019-11-14
?
潇湘沐

如果您的代码未在非交互式会话(例如系统服务)中运行,则可以通过pinvoke使用本机解决方案:


//SM_SHUTTINGDOWN = 0x2000

bool bShutDownPending = GetSystemMetrics(SM_SHUTTINGDOWN) != 0;


查看完整回答
反对 回复 2019-11-14
?
UYOU

如果按照我的建议实施,则不会浪费任何“系统资源”,尤其是任何措施。.NET应用程序。已经有一段时间了,我找不到确切的应用程序,但是我提供上述解决方法的原因是因为.NET SystemEvents.SessionEnded不可用。否则,显然要使用它。此外,您可能想知道用户是否正在立即注销,例如在实施另一个事件时。在这种情况下,此解决方案更加可靠,根本不需要轮询。

查看完整回答
反对 回复 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信