在C#中拦截Windows Vista关闭事件

时间:2020-03-06 14:52:29  来源:igfitidea点击:

我希望能够拦截Cfor Windows Vista中的关闭事件。由于Vista的高级安全功能,在调用shutdown命令后正在运行的所有应用程序都将被暂停并显示在列表中,提示用户对其进行操作。

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

谢谢。

解决方案

System.Environment.HasShutdownStarted

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

我们可能想在这里查看Windows Vista中的应用程序关闭更改。基本上,对于我们想要的一切,一切都围绕WM_QUERYENDSESSION进行。

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

例如(显示未关闭的原因),我们可以在C#中看到Windows Vista ShutdownBlockReasonCreate。

使用活动

WPF的Application.SessionEnding。

我们正在寻找Microsoft.Win32.SystemEvents上的SessionEnding / SessionEnded事件。