我想用C#做一个window服务,监听关机/休眠动作,当触发关机指令时,进行拦截,退出一个对话框,如果用户确定后,系统继续关机,否则取消关机,哪位大仙能指点一二,谢谢
楼下的方法我已经试过,在winfrom下关机可以提示,但是win7下还是没能拦截关机指令,可能XP下可以吧,大仙们,帮帮忙啊,我有两个想法:
1、用c#开发window服务,监控关机指令,收到关机/休眠后,弹出一个对话框,用户确定后才能关机。。。
2、开发winfrom小程序,拦截关机,功能跟1的一样
我期望的功能优先级是 window服务--winfrom
哪位哥/姐能帮弄的,小弟感激不尽啊,赏金100 不成敬意,O(∩_∩)O~
你在winform中实现吧,很容易的,在主界面后台代码中重写WndProc方法就行了,具体代码见下面的:
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);
}
可以通过HOOK系统关机的API函数来实现对关机的监控( NtShutdownSystem , ExitWindowEx)
如果通过net framework中提供的一些事件/类来判断会漏掉很多东西的。
好的,我有空研究一下,这种是钩子的实现吧
@O(∩_∩)O~。: 恩,用钩子相对来说比较保险点,至少不是碰上一些比较暴力的关机基本都可以被捕获到的,而且目前也有很多开源的HOOK类库,直接拿来使用就可以了,相对开发难度也低了很多