请各位有实之士抽空看看(没钱了)(0分)

  • 主题发起人 主题发起人 myoldsaturn
  • 开始时间 开始时间
M

myoldsaturn

Unregistered / Unconfirmed
GUEST, unregistred user!
各位,在下遇到如此一个问题,我做了一个程序,想让它只能在关闭WINDOWS系统的时候关闭
我的应用程序,如果系统不关闭就不能关闭我的程序。
于是我重写了消息过程
procedure WMQueryEndSession(varMsg:TMessage); messageWM_QueryEndSession。
如果在别的WINDWOS 应用程序关闭之后,再关闭系统,那么我的程序也将正常关闭。
麻烦是:
1。运行我的程序后,你打开WORD,随便输入点什么,然后选择重新启动系统,这时,系统将首先
把我的程序关掉,然后WORD 提示你,保存、不保存、取消,如果选择"取消"系统将不关闭
别人仍然可以再用它,
2。这个时候,即使你想通过WINDOWS 关闭系统都不能了。
解决方案:(我现在不知道如何做)
1。如何把我的程序作为最后关闭的应用程序
2。在WMQueryEndSession内 用ExitWindowsEx 不起作用,如何做才能让它有效
3.......
 
请帮忙提前一下
 
请先说明一下为什么要这样做,我觉得这似乎不太人道。
 
在OnCloseQuery事件中加变量处理
 
对了我做的是机房管理系统的客户端。
我需要在关闭机器前,而且只能在关闭系统时(不能让一般人退出程序,只有管理员能),
保存一些数据,所以就只能写在WMQueryEndSession中了,
但是,出现了前面的那种逃避关机而保存数据的办法,真实老火。
谢谢
 
SuperJS:
请说清楚点好吗?谢谢
 
我在Close、CloseQuery、Destory三者中写程序
但是,在运行着程序 ,然后关闭WINDOWS 时都不触发的,
而我恰好需要这时保存数据所以只好找WMQueryEndSession


 
用你up一下[:D]
 
你的三个事件都不触发?
我的至少触发CloseQuery事件!
我的环境:WinME+Delphi5
 
各位是否用过 ram idle 这个内存优化软件 ,她能没次启动都第一个在 systray 中
为什么呢,是不是他的启动速度很快呢?

若我的程序或WINDOWS 的喇叭将当在 SYSTRAY 的最后时将被关闭
(如果WORD 提示你,保存、不保存、取消,如果选择"取消"系统将不关闭)
 
yzhshi兄:
如果,你在,close,CLOSEQUERY ,DESTROY 中SHOWMESSAGE 写一下
然后运行你的程序,这时,直接关机或重新启动,你看看能不能触发呢?
 
我觉得最好调用api函数好一点,
 
记得Windows采用类似事务两阶段提交的方式,先vote,然后再关闭的
你可以vote的时候回答yes,正式关闭的时候在关闭程序。
 
From MSDN
**************************************************************
The WM_QUERYENDSESSION message is sent when the user chooses to
end the session or when an application calls the ExitWindows
function. If any application returns zero, the session is not
ended. The system stops sending WM_QUERYENDSESSION messages as
soon as one application returns zero.

After processing this message, the system sends the
WM_ENDSESSION message with the wParam parameter set to the
results of the WM_QUERYENDSESSION message.
***************************************************************
 
JJams_King兄:
在下明白你的意思,不过我的问题是,系统老是先关我的程序我
在ENDSESSION中也会出现这个问题的,先关了什么都完了 :(,
请问,如何能在任务栏中比如WORD ,EXPLORE 等关闭后再关闭???
 
你是说WORD不老实,投了赞成票又不关闭?
我刚刚看了WM_ENDSESSION,好像是不管投票结果如何都会发的,
投票结果在wParam里面。你试一下在WM_ENDSESSION里面test一下
这个值,在TRUE的时候才关闭,看看还会不会出现这种情况。
 
如果我的程序禁止关闭自己,那么系统好象就会终止关闭系统操作,同时也
不会关闭别的程序了,就好象挡了一堵墙
 
我试了,2000下确实不行。后来认真看了MSDN发现:
$quote$
WM_QUERYENDSESSION

Remarks
...
Windows NT/2000: When an application returns TRUE for this message,
it receives the WM_ENDSESSION message and it is terminated,
_regardless_ of how the other applications respond to the
WM_QUERYENDSESSION message.
...
$/quote$

我再想想别的办法
 
JJams_King,:
好地
QQ,毒霸不会有这种时,金山词霸会
 
>来自:myoldsaturn, 时间:2002-1-9 12:17:00, ID:844715
>JJams_King,:
> 好地
>QQ,毒霸不会有这种时,金山词霸会

刚刚在2000下试了一下,如果在QQ启动后启动一个程序在queryEndSession的时候
返回false,那么关机的时候QQ会被关掉。所以我觉得QQ应该也没有特殊处理这个
问题
 
后退
顶部