cg:麻烦大了,有一定难度,各位请帮忙解决,急盼各位兄弟相助:((100分)

  • 主题发起人 主题发起人 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.......
 
一定要这样吗?

让你的程序作为系统服务,可不可以达到你的要求。。。[:)]
 
你是如何重写消息过程的?
procedure WMQueryEndSession(varMsg:TMessage); messageWM_QueryEndSession

贴出来,OK?
 
好的
procedure TLoginMainFrm.WMQueryEndSession(var Msg: TMessage);
begin
; inherited;
; LoginMainFrm.Close;
; Msg.Result := 1;
end;
 
我记得应该是 ;: Msg.Result := 0;
返回0,就不会关闭你的应用程序吧?
 
如果让自己的程序返回1,那么Windows连尝试关闭Word都不会。
我想应该自己接到关闭消息后,先不返回,再向其他进程发送关闭的消息,直到所有的进程都关闭了。
再关闭自己。
 
喔,你的第二个问题,已经想到这个办法了,你是否可以在程序的OnClose或者OnCloseQuery里面调用
ExitWindowsEX什么的。
是在不行,使用SendMessage
 
各位:
; ; 首先,当应用程序受到查询关闭消息时,返回1表示可以关闭 ,0则是否。
; ; 其次,application 的Onclose 和OnCloseQuery 在 ,当程序运行时,你选择
重新启动机器,那么,这两个事件都无法发生,只用WMQueryEndSession能。
; ;我需要在关闭机器前,而且只能在关闭系统时,保存一些数据,所以就只能写在WMQueryEndSession中了,
但是,出现了前面的那种逃避关机而保存数据的办法,真实老火。
; ;对了我做的是机房管理系统的客户端。
; ;谢谢各位,请继续讨论
; ;
 
我将Close、CloseQuery、Destory里面都添加了事件,其中CloseQuery在三种方式下都能够触发。
其他两者都不触发。
 
yzhshi兄:
; ; 三者,我在运行着程序 ,然后关闭WINDOWS 时都不触发的
 
请各位有实之士抽空看看
 
后退
顶部