gpt4 book ai didi

windows - 不阻止 Windows 关闭 OnCloseQuery

转载 作者:可可西里 更新时间:2023-11-01 13:52:29 25 4
gpt4 key购买 nike

我有一个应用程序,它在关闭时通过红叉隐藏自己。用户可以通过右键单击托盘图标并选择退出来退出它。但它显然会阻止窗口关闭,所以我做了一个程序来响应 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;

最佳答案

WM_QUERYENDSESSION 是一个“查询”,而不是一个关机命令:Windows 会询问您是否可以关机,但不会要求您关机。你不应该调用 Close!

其次,Windows 希望您在处理该消息时返回 TRUE,因此它知道您可以接受潜在的关机。我假设您没有将结果设置为 TRUE,因此 Windows 会中止第一个关机请求。

关于windows - 不阻止 Windows 关闭 OnCloseQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com