首页 新闻 会员 周边 捐助

拦截window关机/休眠指令

0
悬赏园豆:100 [待解决问题]

我想用C#做一个window服务,监听关机/休眠动作,当触发关机指令时,进行拦截,退出一个对话框,如果用户确定后,系统继续关机,否则取消关机,哪位大仙能指点一二,谢谢

问题补充:

楼下的方法我已经试过,在winfrom下关机可以提示,但是win7下还是没能拦截关机指令,可能XP下可以吧,大仙们,帮帮忙啊,我有两个想法:
1、用c#开发window服务,监控关机指令,收到关机/休眠后,弹出一个对话框,用户确定后才能关机。。。

2、开发winfrom小程序,拦截关机,功能跟1的一样

我期望的功能优先级是 window服务--winfrom

哪位哥/姐能帮弄的,小弟感激不尽啊,赏金100 不成敬意,O(∩_∩)O~

O(∩_∩)O~。的主页 O(∩_∩)O~。 | 初学一级 | 园豆:95
提问于:2011-08-15 11:34
< >
分享
所有回答(2)
-1

你在winform中实现吧,很容易的,在主界面后台代码中重写WndProc方法就行了,具体代码见下面的:

View Code
private const int WM_QUERYENDSESSION = 0x0011;//要截获的关机消息
private int isNoClose = 0;//0不关闭程序和系统;
private int isClose = 1;//1关闭程序及系统
protected override void WndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WM_QUERYENDSESSION:
if (MessageBox.Show("关闭系统吗?", "关机拦截", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
{
m.Result
= (IntPtr)isNoClose;
}
else
{
m.Result
= (IntPtr) isClose;
}
break;
default:
break;
}

base.WndProc(ref m);
}

LCM | 园豆:6876 (大侠五级) | 2011-08-15 13:49
大哥,能不能在window服务里实现啊,求协助啊。。。
支持(0) 反对(0) O(∩_∩)O~。 | 园豆:95 (初学一级) | 2011-08-15 14:23
晚上帮你弄,公司的机器是win2003的,没法测。
支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2011-08-15 16:57
@LCM:好的,谢谢啊。。。 晚上加我QQ哈:632926748
支持(0) 反对(0) O(∩_∩)O~。 | 园豆:95 (初学一级) | 2011-08-15 17:47
0

可以通过HOOK系统关机的API函数来实现对关机的监控( NtShutdownSystem , ExitWindowEx)

如果通过net framework中提供的一些事件/类来判断会漏掉很多东西的。

 

andy1987 | 园豆:490 (菜鸟二级) | 2013-09-04 17:36

好的,我有空研究一下,这种是钩子的实现吧

支持(0) 反对(0) O(∩_∩)O~。 | 园豆:95 (初学一级) | 2013-09-05 13:07

@O(∩_∩)O~。:  恩,用钩子相对来说比较保险点,至少不是碰上一些比较暴力的关机基本都可以被捕获到的,而且目前也有很多开源的HOOK类库,直接拿来使用就可以了,相对开发难度也低了很多

支持(0) 反对(0) andy1987 | 园豆:490 (菜鸟二级) | 2013-09-05 18:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册