7

我希望能够在 C# 中为 Windows Vista 拦截关机事件。由于 Vista 的高级安全功能,调用关机命令后运行的任何应用程序都会停止并显示在列表中,提示用户对其进行操作。

有谁知道如何克服这个问题以及我需要在 Vista 中使用哪些事件。

谢谢。

4

5 回答 5

6

您可以使用 WPF 的应用程序对象并订阅其 SessionEnding 事件。然后,您可以查看SessionEndingCancelEventArgs.ReasonSessionEnding枚举以确定会话结束的确切原因(LogOff 或 Shutdown)。

于 2008-09-29T14:06:40.717 回答
5

您可能想看看这里 - Windows Vista 中的应用程序关闭更改。基本上,对于您想要的,这一切都围绕着 WM_QUERYENDSESSION。

请注意,这在 .net 框架中公开 - 相反,您需要使用本机函数 (p/invoke) 并在代码中挂钩 wndproc 以响应 Windows 消息。

例如(显示不关机的原因),您可以查看Windows Vista - ShutdownBlockReasonCreate in C#

于 2008-09-29T14:07:28.593 回答
0
System.Environment.HasShutdownStarted
于 2008-09-29T14:01:03.210 回答
0

使用事件

WPF 的 Application.SessionEnding。

于 2008-09-29T14:09:18.353 回答
0

Microsoft.Win32.SystemEvents 上的 SessionEnding / SessionEnded 事件可能是您正在寻找的。

于 2008-09-29T14:11:25.727 回答