首页 文章

如何检测Windows关闭或注销

提问于
浏览
45

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

我看了帖子Is there a way in c# to detect a Windows shutdown/logoff and cancel that action (after asking the user)

但我不确定在结束前我应该在哪里执行操作 . 谢谢 .

2 回答

  • 9

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

    //SM_SHUTTINGDOWN = 0x2000
    bool bShutDownPending = GetSystemMetrics(SM_SHUTTINGDOWN) != 0;
    
  • 51

    Attach an event handler methodSystemEvents.SessionEnding event,每次引发事件时都会调用您的处理程序方法 . 如果您愿意,处理此事件将允许您取消挂起注销或关闭 . (虽然这实际上并不像当前操作系统中的声音那样工作;有关更多信息,请参阅MSDN documentation here . )

    如果您不想取消该事件,只是恰当地对其做出反应,则应该处理SystemEvents.SessionEnded event .

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

相关问题