我希望能够在 C# 中为 Windows Vista 拦截关机事件。由于 Vista 的高级安全功能,调用关机命令后运行的任何应用程序都会停止并显示在列表中,提示用户对其进行操作。
有谁知道如何克服这个问题以及我需要在 Vista 中使用哪些事件。
谢谢。
我希望能够在 C# 中为 Windows Vista 拦截关机事件。由于 Vista 的高级安全功能,调用关机命令后运行的任何应用程序都会停止并显示在列表中,提示用户对其进行操作。
有谁知道如何克服这个问题以及我需要在 Vista 中使用哪些事件。
谢谢。
您可以使用 WPF 的应用程序对象并订阅其 SessionEnding 事件。然后,您可以查看SessionEndingCancelEventArgs.ReasonSessionEnding枚举以确定会话结束的确切原因(LogOff 或 Shutdown)。
您可能想看看这里 - Windows Vista 中的应用程序关闭更改。基本上,对于您想要的,这一切都围绕着 WM_QUERYENDSESSION。
请注意,这在 .net 框架中公开 - 相反,您需要使用本机函数 (p/invoke) 并在代码中挂钩 wndproc 以响应 Windows 消息。
例如(显示不关机的原因),您可以查看Windows Vista - ShutdownBlockReasonCreate in C#。
System.Environment.HasShutdownStarted
使用事件
WPF 的 Application.SessionEnding。
Microsoft.Win32.SystemEvents 上的 SessionEnding / SessionEnded 事件可能是您正在寻找的。