WM_QUERYENDSESSION与WM_ENDSESSION

本文详细介绍了Windows XP和Vista之后系统中,WM_QUERYENDSESSION和WM_ENDSESSION消息的处理方式及变化。在XP系统中,应用程序返回FALSE可终止注销操作,而在Vista之后的系统中,阻止关机的行为受到更严格的限制,推荐使用特定API以优化用户体验。
摘要由CSDN通过智能技术生成

此文已由作者王荣涛授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。



首先XP系统和Vista以后的系统,这两个消息的处理方式是不同的。


XP系统


系统发送WM_QUERYENDSESSION,如果你返回FALSE,那么大多数情况下,系统的注销操作会被终止,并且接下来收到的WM_ENDSESSION的wParam参数值为FALSE。按照微软的应用程序设计指导,这个时候你需要出UI告诉用户被终止的原因。


应用程序可以暂时不响应这个消息,比如先不会返回,而是在处理这个消息的代码中弹出一个模态对话框提示用户选择。


默认情况下,你有5秒的时间来处理这个事情。超过5秒后系统出一个对话框提示该应用程序无响应。


如果任意顶层窗口在处理WM_QUERYENDSESSION的时候返回了FASLE,那么注销过程会被取消,之前收到这个消息的窗口又会收到一条WM_ENDSESSION消息,并且它的wParam将为FALSE。


只有当所有顶层窗口收到WM_QUERYENDSESSION之后都返回TRUE,它们才会被一次发送WM_ENDSESSION并且wParam消息为TRUE。一旦进入这一步,注销过程无法撤销。


处理WM_ENDSESSION的时间也是5秒,超过后系统也会弹窗提示。一旦应用程序响应了WM_ENDSESSION消息,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值