如何判断程序接收到的是 WM_QueryEndSession 消息?(20分)

  • 主题发起人 主题发起人 icysword
  • 开始时间 开始时间
I

icysword

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在 TForm1.FormCloseQuery 事件中判断程序接收的是不是 WM_QueryEndSession 消息,
如果是就正常响应 WM_QueryEndSession 消息(如注销, 重启或关闭计算机).
如果不是就 CanClose:=false; form1.hide; 使程序隐藏起来, 而不是退出.

请问该怎么做?
 
自己接管消息
 
接管以后不知道怎样在 TForm1.FormCloseQuery 事件里面加以判断啊.
还有, Application.OnMessage 能接收到 WM_QueryEndSession 消息吗?
 
...
private
{ Private declarations }
procedure MyShutDown(var Msg: TWMQUERYENDSESSION); message WM_QUERYENDSESSION;
......

procedure TForm1.MyShutDown(var Msg: TWMQUERYENDSESSION);
begin
if MessageBox(0, '真的要关机吗?', '注意', MB_YESNO) = IDYES then
msg.Result := 1;
end;
 
这个问题好像不能在 TForm1.FormCloseQuery 事件里面做判断, 即使勉强能, 也会经常在
收到消息后使程序没反应, 最后导致死机(win98).
而且好像Application.OnMessage拦不了wm_queryendsession消息, 是吗?
 
后退
顶部