首页 新闻 搜索 专区 学院

拦截关机消息延迟关机的问题?

0
悬赏园豆:100 [已解决问题] 解决于 2012-10-11 16:40

请问下高手,有人知道我们在拦截到关机消息时,如果要做一些自己的操作。如果超过20秒如何让时间自动顺延,而不要出现“立即结束”窗口或不要出现20秒强制结束进程的操作吗?

protected override void WndProc(ref Message m)
        {
            const int WM_QUERYENDSESSION = 0x011;
            const int WM_ENDSESSION = 0x16;
            if (m.Msg == WM_QUERYENDSESSION)
            {
                var ret = MessageBox.Show("Yes or No ?", "Test", MessageBoxButtons.YesNo);
                return;
            }
            base.WndProc(ref m);
        }

以上代码在关机时,如果阻塞超过一定时间就会有立即结束的对话框,我觉得很不友好,能否屏蔽或延迟关机/或重启/或注销,而不要出现那个讨厌的窗口?

问题补充:

我现在有一个解决方案,但不太完美,就是拦截到EndSession消息,直接返回false,让系统不要关机,但要记住系统调用的是关机还是注销,等用户确认完毕后,手动调用关机或注销代码。但缺点是无法分清是关机还是重启命令,导致重启命令会被当作关机来对待。

空明流光的主页 空明流光 | 初学一级 | 园豆:48
提问于:2012-09-27 14:12
< >
分享
最佳答案
0

http://jingyan.baidu.com/article/09ea3edecd51a0c0aede39b7.html

按照这个步骤,修改关机等待时间为一个你期望的时间即可,就不用拦截关机等待的消息了

收获园豆:60
I,Robot | 大侠五级 |园豆:9461 | 2012-09-27 15:00

这个我也早试过了,这个修改后并不能立即生效。我需要的是动态的值,而不一个死的固定的值,调成固定的值就没有意义了。

空明流光 | 园豆:48 (初学一级) | 2012-09-27 15:11

@沧海一杰: 

你的本意不就是不想看到强制结束的窗口么,你改成一个无限大的关机等待时间,这个窗口不就永远不会出来了么,为什么还要去动态修改呢?

I,Robot | 园豆:9461 (大侠五级) | 2012-09-27 15:13

@狼Robot: 听起来好像是可以这样,操作系统原有功能就会被改变,感觉这样的用户体验有点不好。

空明流光 | 园豆:48 (初学一级) | 2012-09-27 15:19

@沧海一杰: 

你的需求本身就已经违反了操作系统原有的设计了,呵呵

I,Robot | 园豆:9461 (大侠五级) | 2012-09-27 15:24

@狼Robot: 看看明天有没有更好的方法,明天结贴,大家别急哦

空明流光 | 园豆:48 (初学一级) | 2012-09-27 16:01
其他回答(2)
0

理论上好象可行但很难实践更难实现

收获园豆:10
jason2013 | 园豆:1998 (小虾三级) | 2012-09-27 15:36
0

可以用服务来实现。服务可以请求更长的时间,在开始、暂停、终止的时候。

 

关机会自动调用终止,你在终止里头不断调用请求更长时间就可以了。

收获园豆:30
荣耀属于跪拜猫 | 园豆:832 (小虾三级) | 2012-10-07 12:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册