实现效果:

知识运用:
在系统执行关机操作时会向正在运行的应用程序发送一个消息WM_QUERYENDSESSION
通知应用程序要关机了 如果消息返回的是0那么就不会自动关机
重写WndProc方法
protected virtual void WndProce (ref Message m)

实现代码:
private int isClose = 0; //声明一个变量表是是否关闭
private const int WM_QUERYENDSESSION = 0x0011; //系统发出的关闭命令
protected override void WndProc(ref Message m) //用于处理Windows消息
{
switch (m.Msg) //获取消息值
{
case WM_QUERYENDSESSION:
m.Result = (IntPtr)isClose; //响应消息处理
break;
default: //默认执行
base.WndProc(ref m);
break;
}
}
private void button1_Click(object sender, EventArgs e)
{
isClose = 0;
MessageBox.Show("禁止关闭计算机");
}
private void button2_Click(object sender, EventArgs e)
{
isClose = 1;
MessageBox.Show("允许关闭计算机");
}