【发布时间】:2015-03-05 19:03:54
【问题描述】:
如果用户尝试关闭应用程序,我想显示关闭查询确认对话框。如果系统关闭或任务或进程正在从任务管理器中结束,我只想清理并关闭。
我试过这段代码:
private
procedure WMEndSession(var Message: TWMEndSession); message WM_ENDSESSION;
...
procedure TxxxForm.WMEndSession(var Message: TWMEndSession);
begin
gShuttingDown := Message.EndSession;
end;
...
procedure TxxxForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Application.ProcessMessages;
if gShuttingDown then
CanClose := True
else
CanClose := MessageDlg('Are you sure you want to stop the close?', mtConfirmation,
[mbYes, mbNO], 0) = mrYes;
end;
弹出确认显示我是关闭程序还是从任务管理器终止进程。
【问题讨论】:
-
如果我没记错的话,你想要 WM_QUERY_ENDSESSION。
-
我尝试添加:`procedure TxxxForm.WMQueryEndSession(var Message: TWMQueryEndSession);开始 gShuttingDown := True; end;` 但是当我从任务管理器“结束任务”时它仍然发出关闭查询对话框。
-
@Günther the Beautiful 是的,这就是答案。而不是试图检测强制关闭,我应该检测用户关闭。我将我的 gShuttingDown 变量设置为 True,并在我得到一个命令类型为 SC_CLOSE 的 WM_SYSCOMMAND 时设置 if False(用户关闭程序的所有方式)。完美运行。
-
ProcessMessages 调用的意义何在?
标签: delphi shutdown delphi-xe4 application-shutdown