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;
}
}
}
支持楼上
楼上的不行