我希望能够拦截Windows Vista中的C#中的closures事件。 由于Vista具有高级安全function,因此在调用shutdown命令之后运行的任何应用程序都会暂停并显示在列表中,从而提示用户使用它们执行某些操作。
有谁知道如何克服这个问题,以及我需要在Vista中使用哪些事件。
谢谢。
您可以使用WPF的应用程序对象并订阅其SessionEnding事件。 然后,您可以查看SessionEndingCancelEventArgs.ReasonSessionEnding枚举来确定会话结束的原因(LogOff或Shutdown)。
你可能想看的是在这里 – Windows Vista中的应用程序关闭更改 。 基本上,你想要什么,它都围绕着WM_QUERYENDSESSION。
请注意,这是暴露在.net框架 – 相反,您将需要使用原生函数(p / invoke)并挂钩在您的代码中的wndproc响应的Windows消息。
举一个例子(显示不关闭的原因),你可以在C#中看到Windows Vista – ShutdownBlockReasonCreate 。
使用该事件
Application.SessionEnding为WPF。
Microsoft.Win32.SystemEvents上的SessionEnding / SessionEnded事件可能是您正在查找的内容。
System.Environment.HasShutdownStarted