为何拦截关机信息无法生效?[在线等](30分)

  • 主题发起人 主题发起人 dazzling
  • 开始时间 开始时间
D

dazzling

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TrunOffMsg(var Msg:TMessage);message WM_ENDSESSION;



procedure TMAIN.TrunOffMsg(var Msg: TMessage);
begin
msg.Result:=0; //这里无论是0还是1,都照常关机.为何会这样????
end;
 
你不能阻止关机。但是你可以延迟关键。要知道,你不让系统立即关机的原因是什么?

大部分情况是你担心用户在使用软件的时候,没有及时保存信息!

所以一般处理是这样的:
procedure TMAIN.TrunOffMsg(var Msg: TMessage);
begin
msg.Result:=0; //这里无论是0还是1,都照常关机.为何会这样????
// 做一些保存操作。可以弹出窗体让用户保存啊等等。
msg.Result := 1; // 这个只是告诉系统,你的程序已经正常关闭了。
// 关闭应用程序。这样程序可以是正常关闭!
end;
 
不行.
只要一按关机键,立刻关闭.没有任何延迟.
我试着在那里放一个showmessage但会自动关闭
 
我照着书本做过,应该和楼主的一样
不过我的正常,当我执行那个程序的时候确实无法关机
 
去查MSDN发现有这一句
The application need not call the DestroyWindow or PostQuitMessage function when the session is ending.

不知道是否问题关键,偶英语不好,错了笑我哈
 
如果系统发送强制关机消息,则这个方法是无法拦截的 !
 
因为如果某个应用程序调用ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,0);来关机,程序就阻止不了,应为那样调用ExitWindowsEx,系统不会发出WM_QUERYENDSESSION消息,程序也就没有用了,呵呵。
 
帮你UP[:)]一下
 
偶说的是按挚关机的情况
 
你不会是说按电源按钮吧?靠!要是那样!主板直接给电源发送at指令,拦住了也没有用!强制关机为什么也拦截不了呢?他不发送QUERYENDSESSION消息,所以他不对内存里的数据保存!所以没有保存的信息会丢失!
 
是吗? 那你解释一下为何有时关机关不了?
(不是长按关机挚)
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部