在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事件。