我正在使用c#.net 4.0开发一个Windows窗体应用程序。 我想捕获Windows注销事件。
以下是代码:
public Form1()
{
InitializeComponent();
SystemEvents.SessionEnding += (s, e) =>
{
if (e.Reason == SessionEndReasons.Logoff)
{
MessageBox.Show("LogOff");
}
else if (e.Reason == SessionEndReasons.SystemShutdown)
{
MessageBox.Show("ShutDown");
}
};
}
为什么我的sessionEnding没有被解雇?
答案 0 :(得分:2)
打开gpedit.msc,导航到计算机配置>管理模板>系统>关闭选项并选择关闭阻止或取消关闭的应用程序的自动终止。由于我的笔记本电脑配置使其自动关闭,因此它永远不会触发会话结束
也许您可以将上面的代码移动到其窗口的入口点(在主窗口中)。
也许您可以覆盖Windows消息。您可以在MSDN库文档中看到它。 http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.sessionending.aspx
关闭消息泵已被其他软件重新路由,无法重新路由到您的应用
答案 1 :(得分:1)
这可能对某人有用。
如果包含表格关闭事件
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
然后不会触发SessionEnding,我只是遇到了这个问题并纠正了它
void SystemEvents_SessionEnding(object sender, Microsoft.Win32.SessionEndingEventArgs e)
{}
这里我需要阻止Form关闭Alt + F4命令,所以我添加了这个表单关闭事件,这导致了这个问题。所以我们可以在表单关闭事件中集成会话结束事件。 Refered from stackoverflow answer
中的选项2