首页 新闻 会员 周边

C#如何拦截系统关机

1
悬赏园豆:20 [已解决问题] 解决于 2015-12-11 08:54

现在做一个小软件,需要在运行软件的时候不允许关机,也就是从开始菜单里面关机的话阻止他,拦截,只有当这个小软件关闭后也就是不允许的时候才正常可以使用!

百度搜索了一下,有些人说是拦截WM_QUERYENDSESSION消息,可是具体怎么做呢?

飞扬青云的主页 飞扬青云 | 初学一级 | 园豆:182
提问于:2010-10-12 10:16
< >
分享
最佳答案
1

C#中有个类Microsoft.Win32.SystemEvents,这个类是专门用来捕获系统事件的。如果要拦截关机事件,只要定义自己的Microsoft.Win32.SystemEvents.SessionEnding事件就行。

简单的例子如下:

主要就是自定义Microsoft.Win32.SystemEvents.SessionEnding += SessionEndingEvent

 

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
     // 自定义关机和logoff的事件
Microsoft.Win32.SystemEvents.SessionEnding
+= SessionEndingEvent;
}

// 在此事件中决定是否关机或logoff
private void SessionEndingEvent(object sender, SessionEndingEventArgs e)
{
SessionEndReasons endReasons
= e.Reason;

if (MessageBox.Show("Do you want to logoff or shutdown?", "is logoff or shutdown?", MessageBoxButtons.YesNo)
== System.Windows.Forms.DialogResult.Yes)
{
       // 会关机或logoff
e.Cancel
= false;
}
else
{
  // 不会关机或logoff
e.Cancel
= true;
}

switch (endReasons)
{
case SessionEndReasons.Logoff:
MessageBox.Show(
"logoff......");
break;

case SessionEndReasons.SystemShutdown:
MessageBox.Show(
"shutdown......");
break;

default:
break;
}
}
}
收获园豆:20
wang_yb | 老鸟四级 |园豆:4891 | 2010-10-12 15:38
其他回答(2)
0

支持楼上

/aiq浪子飞龙 | 园豆:1189 (小虾三级) | 2010-11-04 21:57
0

楼上的不行

清新的空气 | 园豆:202 (菜鸟二级) | 2016-03-16 19:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册