Delphi:如果用户重新启动/关闭,Application.Run后面的代码不会执行

hik*_*ari 9 delphi winapi

我在"Application.Run"之后放了一些代码 通常在应用关闭时运行.但是,当用户重新启动或关闭Windows时,永远不会达到这一点.

这可以在不捕获WM_ENDSESSION的情况下解决吗?(并且不涉及任何形式,我希望在dpr结束时application.run之后保留代码)

Ser*_*yuz 18

VCL已经监听WM_ENDSESSION(隐藏的应用程序窗口),并在会话结束时终止应用程序.您可以在.dpr(或其他地方)中添加一个终止过程,该过程将在可能的其他终止过程中调用:

program Project1;

uses
  Vcl.Forms,
  sysutils,
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

function OnTerminate: Boolean;
begin
  Result := True;
  // do some short work
end;

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm2, Form2);
  AddTerminateProc(OnTerminate);
  Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)