我有一个应用程序在被红十字关闭时隐藏起来。用户可以通过右键单击托盘图标并选择退出来退出它。但它显然会阻止窗口关闭,所以我做了一个程序来响应 WM_QUERYENDSESSION 以启用关闭,这是相关代码:
procedure TMainForm.OnWindowsEnd(var Msg: TMessage); // responds to message WM_QUERYENDSESSION;
begin
AllowClose:=true;
Close;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=AllowClose;
if NOt AllowClose then
Hide;
end;
但奇怪的事情不断发生。当我发出关闭命令时,此应用程序会很好地关闭。但仅此而已。当我发出第二次关机时,系统退出正常。(我在 WinXP 中对此进行测试)。
可能是什么原因?谢谢
答案 代码应如下所示
procedure TMainForm.OnWindowsEnd(var Msg: TMessage); // responds to message WM_ENDSESSION;
begin
// Possible checking for flags, see http://msdn.microsoft.com/en-us/library/aa376889%28v=vs.85%29.aspx
AllowClose:=true;
Msg.Result:=1;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=AllowClose;
if NOt AllowClose then
Hide;
end;