Windowsの終了を感知する

Windowsが終了しようとするとアプリケーションには WM_QUERYENDSESSION メッセージが送信されます。さらにこのメッセージ ( Msg.Source )にゼロを返せば Windowsの終了をキャンセルする事が可能です。

■ Windowsの終了をメッセージで感知する方法
type
  TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
    procedure QryEnd(var Msg : TWMQueryEndSession);
              message WM_QUERYENDSESSION;
  public
    { Public 宣言 }
  end;

implementation

procedure TForm1.QryEnd(var Msg : TWMQueryEndSession);
begin
  if  MessageDlg('閉じますか?',mtInforamtion,[mbYes,mbNo],0) = mrNo then  
  begin
      //  Windowsの終了をキャンセルする
      Msg.Source  :=  0;
  end;
end;