W wsn Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-28 #1 Windows 在关机之前都作什么了,我该怎么加入自己的程序呢?
D David Jiang Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-28 #2 首先要了解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的命令,这样可以确保应用程序的数据不会丢失。 自己的程序可以捕捉上述的两个消息.
首先要了解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的命令,这样可以确保应用程序的数据不会丢失。 自己的程序可以捕捉上述的两个消息.
W wsn Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-30 #5 to: David Jiang 小弟愚笨 能讲的更清楚一些吗? 比如说,我开机的时候在机器中留个记号,关机时再在什么地方留下关机的时间什么的 以次来记录这台机器都什么时间被人用过, 甚至他都操作了什么都能记录下来 同时这样的程序运行时不会被人轻易的躲避过去
to: David Jiang 小弟愚笨 能讲的更清楚一些吗? 比如说,我开机的时候在机器中留个记号,关机时再在什么地方留下关机的时间什么的 以次来记录这台机器都什么时间被人用过, 甚至他都操作了什么都能记录下来 同时这样的程序运行时不会被人轻易的躲避过去
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2000-12-06 #6 在拦截处理程序用加一个记录,用INI文件处理就可以了,让这个程序不在查看程序列表中 就可以了,找一些相关资料就可以
J jiceyang Unregistered / Unconfirmed GUEST, unregistred user! 2000-12-10 #8 :David Jiang ^_^ 呵呵呵 ! 有个菜鸟问题,怎样捕捉,有没详细说明呀? 或者原程序. 谢谢.
教 教父 Unregistered / Unconfirmed GUEST, unregistred user! 2000-12-14 #10 我觉得最简单的方法就是在你自己程序的OnCloseQuery事件里加入代码就行了嘛,反正关机时 会自动触发这个事件,你只需要在里头判断一下是不是自己关闭的自己就行了。
W wsn Unregistered / Unconfirmed GUEST, unregistred user! 2000-12-18 #11 ~~~~~~~~` 小弟愚笨 大家可以说的再浅显一些吗?
X xie ke Unregistered / Unconfirmed GUEST, unregistred user! 2001-01-18 #13 同意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. 同意教父
同意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. 同意教父
F freely Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-25 #14 小弟,有自己的想法,希望各位大哥不要见笑,因为win要结束,就要通知你的程序,在你的程序对win的这个 消息做拦截处理就可以.
L linush Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-08 #17 我很同意xie ke的看法!不过,我觉得用msg作变量名,好象编译的时候会出现一点 小问题。如果改用winexit(var message:Tmessage);message WM_QUERYENDSESSION; 则一点问题都没有。我看见很多资料都是这样写的。
我很同意xie ke的看法!不过,我觉得用msg作变量名,好象编译的时候会出现一点 小问题。如果改用winexit(var message:Tmessage);message WM_QUERYENDSESSION; 则一点问题都没有。我看见很多资料都是这样写的。
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-13 #18 message 好象是一个关键字吧?为什么一定要用这个名字? 用 aMessage 不就可以了?