Windows 在关机之前都作什么了,我该怎么加入自己的程序呢?(100分)

  • 主题发起人 主题发起人 wsn
  • 开始时间 开始时间
W

wsn

Unregistered / Unconfirmed
GUEST, unregistred user!
Windows 在关机之前都作什么了,我该怎么加入自己的程序呢?
 
首先要了解Windows的关机的程序。当用户退出Windows时,Windows系统会给每个Top-level的窗体发WM_QUERYENDSESSION 的系统消息,查询能否关机,窗体可在接到此消息时进行结束前的工作(如编辑类的窗体会提示未保存的文件存盘等),窗体返回TRUE为同意关机,FALSE为不同意关机。
Windows9x等所有的窗体都回应了WM_QUERYENDSESSION后,系统会再发WM_ENDSESSION的消息,消息的wparam 参数为是否结束Windows,若TRUE,窗体要马上结束程序,若FALSE则取消关闭Windows的命令,窗体可以照常工作。只要某一窗体在WM_QUERYENDSESSION返回FALSE(不同意关机),WM_ENDSESSION的wparam即为FALSE。而在Windows NT/2000窗体返回WM_QUERYENDSESSION后马上接到WM_ENDSESSION的消息,不用等其它窗体对WM_QUERYENDSESSION的回应。不管在9x、Nt和2000,各Top-level的窗体都可以“一票否决”取消关闭Windows的命令,这样可以确保应用程序的数据不会丢失。

自己的程序可以捕捉上述的两个消息.
 
对,我完全同意!
 
完了,迟到了。
同意楼上朋友的说法
 
to:
David Jiang

小弟愚笨
能讲的更清楚一些吗?
比如说,我开机的时候在机器中留个记号,关机时再在什么地方留下关机的时间什么的
以次来记录这台机器都什么时间被人用过,
甚至他都操作了什么都能记录下来
同时这样的程序运行时不会被人轻易的躲避过去
 
在拦截处理程序用加一个记录,用INI文件处理就可以了,让这个程序不在查看程序列表中
就可以了,找一些相关资料就可以
 
呵呵,要是掉电怎么办。
 
:David Jiang ^_^ 呵呵呵 ! 有个菜鸟问题,怎样捕捉,有没详细说明呀? 或者原程序. 谢谢.
 
掉电吗?
每十秒钟刷新一次ini文件就可以了
 
我觉得最简单的方法就是在你自己程序的OnCloseQuery事件里加入代码就行了嘛,反正关机时
会自动触发这个事件,你只需要在里头判断一下是不是自己关闭的自己就行了。
 
~~~~~~~~`
小弟愚笨
大家可以说的再浅显一些吗?
 
````````````
 
同意David Jiang
1. 捕捉windows的关机消息
private
procedure winexit(var msg:Tmessage);message WM_QUERYENDSESSION;
...
procedure TForm1.winexit(var msg: Tmessage);
begin
{your code here}
end;
2. 同意教父
 
小弟,有自己的想法,希望各位大哥不要见笑,因为win要结束,就要通知你的程序,在你的程序对win的这个
消息做拦截处理就可以.
 
; 我关注......
 
我想了解
 
我很同意xie ke的看法!不过,我觉得用msg作变量名,好象编译的时候会出现一点
小问题。如果改用winexit(var message:Tmessage);message WM_QUERYENDSESSION;
则一点问题都没有。我看见很多资料都是这样写的。
 
message 好象是一个关键字吧?为什么一定要用这个名字?
用 aMessage 不就可以了?
 
多人接受答案了。
 
呵呵

斑竹,不好意思
好长时间没上网了

忘了这个帖子了
 
后退
顶部