桌面程序阻止Windows关机(使用Message.Result取得DefWindowProc API函数的返回值,非常重要)
Windows Client 客户端在关机,不外乎两种情况:
1. 没有处理 Windows 关机消息;
2.处理了关机消息,但是超时了;
上面这两种情况,都会让Windows 关不了机。在现实生活中,这个情况的出现,让用户很头疼!
一般出现上面这种情况,要对代码的分析,一定要对消息分发,消息处理的地方进行重点对待。对于Delphi 程序,很多事通过
Var
aHande:THandle;
begin
aHande:=AllocateHWnd(WndProc);
end;
传入 WndProc 过程,如WndProc的原型: procedure WndProc(var Message: TMessage); 在 WndProc 中一定要注意了,对于
自定义的消息处理外,必须的处理Windows的其他消息。
一般的书写方式为:
procedure WndProc(var Message: TMessage);
begin
if Message.Msg=WM_Reply then //WM_Reply 为自定义消息
begin
{ WMReply(Message); 这里是对自定义消息的处理}
end
else
begin
{注意 下面这句话,非常重要,直接调用Window单元 DefWindowProc 进行处理,并且还要指定 Message.Result
很多代码 是调用 Dispatch(Message); 这样写没有错,在VCL里面,它最终调用 Window单元的 DefWindowProc, 但是有可能超时,会导致Windows没有收到关机确认消息,而被阻止,不能正常退出。}
Message.Result :=DefWindowProc(Fhandle,Message.Msg, Message.WParam,Message.LParam);
end;
end;
http://blog.csdn.net/tjb_1216/article/details/5664116
最新文章
- iOS多线程实现2-NSThread
- [转]SQL SERVER – Importance of Database Schemas in SQL Server
- c++ 模板元编程的一点体会
- C#开发COM组件
- 十种JAVA排序算法实例
- 关于 ProcessEngines.getDefaultProcessEngine();NullPointException问题
- 1156. Two Rounds(dfs+背包)
- PHP获取当前时间的毫秒数(yyyyMMddHHmmssSSS)
- Java基础知识强化之集合框架笔记36:List练习之键盘录入多个数据在控制台输出最大值
- 求S=a+aa+aaa+aaaa+aa...a的值
- SQL Server IO系统问题解决
- Fedora24 升级到25
- mongodb分片
- hdu_1711: Number Sequence【KMP算法】
- HTTPS与MITM
- markdown实战问题备忘
- PHP 利用QQ邮箱发送邮件「PHPMailer」
- Prometheus Node_exporter 之 Network Traffic Detail
- 机器学习入门学习笔记:(一)BP神经网络原理推导及程序实现
- 两段 PHP 代码比较优劣