如何记录下关机的时间? ( 积分: 50 )

  • 主题发起人 主题发起人 笨人
  • 开始时间 开始时间

笨人

Unregistered / Unconfirmed
GUEST, unregistred user!
如题 如何记录下关机的时间?[red][/red]
 
如题 如何记录下关机的时间?[red][/red]
 
如果你自己做的程序,你想记录关闭时间,你会怎么做,当然是点关闭的时候把时间记录下来;<br>关闭系统类似,就是在关机的时候往数据库中写时间的问题;
 
我的目的是当windows系统关闭时,自动把关机的时间记录下来<br><br>目的是把别人使用机器时,何时开的机器,何时关的机器自动记录下来<br>而不让使用的人知道,这个程序是自动执行的
 
多转一点<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> &nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> &nbsp;Dialogs;<br><br>type<br> &nbsp;TForm1 = class(TForm)<br> &nbsp;private<br> &nbsp; &nbsp;procedure WMQUERYENDSESSION(var Msg:TMessage);Message WM_QUERYENDSESSION;<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br><br>var<br> &nbsp;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> &nbsp;s:TStrings;<br>begin<br> &nbsp;s:=TStringlist.Create;<br> &nbsp;If (FileExists(Filename)) then<br> &nbsp; &nbsp;s.LoadFromFile(Filename);<br> &nbsp;s.Add(FormatDateTime('yyyy-mm-dd hh:mm:ss',Now));<br> &nbsp;s.SaveToFile(Filename);<br> &nbsp;Msg.Result:=1;<br>end;<br><br>end.
 
记的关闭机器的时候有个消息,好象是WM_QUERYENDSESSION,可以做消息捕捉,捕捉到这个消息之后,就可以做你要做的事了。<br>然后在注册表里也好,在一个只有你知道的目录里也好,记录关机时间不就得了。<br>至于开机时间,可以把你的程序注册到注册表里,一开机就运行,然后记录当前时间。<br>我想应该可以。
 
to chenybin:<br>procedure WMQueryEndSession(varMsg:TMessage);<br>message WM_QueryEndSession; 这句好像有点问题,编译时提示错误<br><br>在者在程序中什么时候调用这个过程才能实现我所要做的哪?
 
不用你自己记录,取系统日志就行了。这是我过去给别人回答的一个问题,里面有你要的答案:<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=2759229
 
多人接受答案了。
 
后退
顶部