关于拦截系统关机并取消关机的操作

baysos 2013-05-15 06:26:59
现在需求大致如下:
当前程序(winform)运行后,因为如果直接关机的话,会影响到其他打印机的打印,所以现在想拦截一下系统关机,让操作人手动处理好后再关机。
现在运用到的拦截关机代码如下:

//构造函数
public FrmMain()
{
Microsoft.Win32.SystemEvents.SessionEnding += SessionEndingEvent;
}

/// <summary>
/// 关机拦截事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SessionEndingEvent(object sender, SessionEndingEventArgs e)
{
SessionEndReasons endReasons = e.Reason;

if (MessageBox.Show("XXXXXXXXXXXXXXX", "提示", MessageBoxButtons.YesNo)
== System.Windows.Forms.DialogResult.Yes)
{
// 关机或注销
e.Cancel = false;
}
else
{
// 取消关机或注销
e.Cancel = true; //这句以及上面那句好像没起作用
}
}
=========================================
现在的情况是可以拦截到关机或注销信息(win7下),即会弹出"XXXXXXXXXXXXXXX"的提示信息,但是点击取消的时候无法取消注销或关机,即注销和关机是照常进行的。请问哪位知道该怎样取消注销和关机呢?或者如果用到xin消息的处理的话该怎样处理,小弟感激不尽~!!!!!!
...全文
1093 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frog1228 2014-04-22
  • 打赏
  • 举报
回复
引用 9 楼 51Crack 的回复:
返回1才是阻止关机 http://blog.csdn.net/ouailuo143/article/details/6534939
貌似有些关机是拦截不了的,如果不是窗口程序,应该是收不到WM_QUERYENDSESSION消息的吧?
风吹腚腚凉 2014-03-28
  • 打赏
  • 举报
回复
引用 7 楼 wjfwd2010 的回复:
[quote=引用 4 楼 sp1234 的回复:] 我基本上从来不用鼠标去关机,都是按电源键几秒钟。
不伤硬盘么?[/quote] P哥的意思是解决这个问题不应该靠程序。
baysos 2013-05-16
  • 打赏
  • 举报
回复
引用 9 楼 51Crack 的回复:
返回1才是阻止关机 http://blog.csdn.net/ouailuo143/article/details/6534939
貌似你的例子也是返回0才能阻止关机,关键是这个例子我要用哪种SDK?
51Crack 2013-05-16
  • 打赏
  • 举报
回复
baysos 2013-05-16
  • 打赏
  • 举报
回复
我顶,求助啊!!!!!!我现在改为消息拦截了,也是一样的问题,可以拦截到消息,但是无法取消 if (m.Msg == WM_QUERYENDSESSION) { var result = MessageBox.Show("XXXXXXXXXXXXXX", "提示", MessageBoxButtons.OKCancel); if (result == System.Windows.Forms.DialogResult.OK) { m.Result = (IntPtr)1; //返回1,让系统继续关机 this.tsmiExit_Click(null, null); // 退出程序 } else { m.Result = (IntPtr)0; //这句貌似没啥用 } _lp = m.LParam; } base.WndProc(ref m); 该怎么破啊。。。。。。今天要交工了。。。。。。。。。。。。而且貌似XP下拦截弹出消息都不起作用(虚拟机中)
风吹腚腚凉 2013-05-16
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
我基本上从来不用鼠标去关机,都是按电源键几秒钟。
不伤硬盘么?
amu0528 2013-05-16
  • 打赏
  • 举报
回复
http://blog.csdn.net/ouailuo143/article/details/6534939
baysos 2013-05-16
  • 打赏
  • 举报
回复
我顶!!!!!!!!!!!!
  • 打赏
  • 举报
回复
我基本上从来不用鼠标去关机,都是按电源键几秒钟。
bigbaldy 2013-05-15
  • 打赏
  • 举报
回复
还真不知道,帮顶了!
51Crack 2013-05-15
  • 打赏
  • 举报
回复
处理 WM_QUERYENDSESSION 消息

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧