首页 > Windows开发 > 详细

桌面程序阻止Windows关机(使用Message.Result取得DefWindowProc API函数的返回值,非常重要)

时间:2017-01-20 07:14:33      阅读:354      评论:0      收藏:0      [点我收藏+]

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

桌面程序阻止Windows关机(使用Message.Result取得DefWindowProc API函数的返回值,非常重要)

原文:http://www.cnblogs.com/findumars/p/6311432.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!