多转一点<br><br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=1394620<br><br>转自网络,包你满意<br><br>其实很简单,当用户关闭WIN9X时<br>系统会发送给各应用程序一个消息wm_queryendsession<br>告诉各应用程序要关机了.如果反馈回来的消息值为0,<br>那么WIN9X就不能关机。因此,截获wm_queryendsession,我们就可以在关闭windows前做我们<br>需要做的工作.等我们做完工作后.再用程序来把windows关闭了.就可以达到你所想要达到的<br>目的了.<br>下面我给你写个例子.你好好看看:<br>unitUnit1;<br>interface<br>uses<br>Windows,<br>Messages,<br>SysUtils,<br>Classes,<br>Graphics,<br>Controls,<br>Forms,Dialogs,<br>StdCtrls;<br>type<br>TForm1=class(TForm)<br>private<br>{Privatedeclarations}<br>//声明拦截WM_QueryEndSession消息的过程<br>procedure WMQueryEndSession(varMsg:TMessage);<br>message WM_QueryEndSession;<br>public<br>{Publicdeclarations}<br>end;<br>var<br>Form1:TForm1;<br>implementation<br>{$R*.DFM}<br>procedure TForm1.WMQueryEndSession<br>(varMsg:TMessage);<br>begin<br>Msg.Result:=0;//如收到关机消息.就首先禁止它关闭.<br>//然后在这一行你就可以做你在关机前做的工作.如保存数据等.如:ibtalbe.post;<br>Msg.result:=1;//在你做完保存数据工作后.就让windows可以关闭了.<br>//然后这一行中.你就可以用你的程序来关闭计算机了.语句:exitwindows(1,0);<br>end;<br>end.<br> <br> <br>来自:iamy, 时间:2005-8-31 9:10:30, ID:3186155 <br>unit Unit1;<br><br>interface<br><br>uses<br> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> Dialogs;<br><br>type<br> TForm1 = class(TForm)<br> private<br> procedure WMQUERYENDSESSION(var Msg:TMessage);Message WM_QUERYENDSESSION;<br> public<br> { Public declarations }<br> end;<br><br>var<br> Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>{ TForm1 }<br><br><br>{ TForm1 }<br><br>Const Filename='c:/Close.txt';<br>procedure TForm1.WMQUERYENDSESSION(var Msg: TMessage);<br>var<br> s:TStrings;<br>begin<br> s:=TStringlist.Create;<br> If (FileExists(Filename)) then<br> s.LoadFromFile(Filename);<br> s.Add(FormatDateTime('yyyy-mm-dd hh:mm:ss',Now));<br> s.SaveToFile(Filename);<br> Msg.Result:=1;<br>end;<br><br>end.