トップへ(mam-mam.net/)

Windows自体(OS自体)の終了を感知する

検索:

「Windows自体(OS自体)の終了を感知する」

delphiで常駐アプリを作成していますが、Windowsのシャットダウンを感知する方法はありますか。
TFormクラスのOnCloseQueryプロパティは、アプリの終了イベントを感知するプロパティなので、
これを使ってしまうと、Windows自体がシャットダウンできなくなってしまいます。 
他に方法はありませんか。

回答

あります。
WM_QUERYENDSESSIONイベントを捕まえれば良いのです。

ソース

type
  TForm1 = class(TForm)
  private
    { Private 宣言 }
    procedure OSEnd(var Msg : TWMQueryEndSession);message WM_QUERYENDSESSION;
  public
    { Public 宣言 }
  end;

implementation

procedure TForm1.OSEnd(var Msg : TWMQueryEndSession);
begin
  if  MessageDlg('終了しますか?',mtInforamtion,[mbYes,mbNo],0) = mrNo then  
  begin
      //  Windowsの終了をキャンセルする
      Msg.result  :=  LongInt(false);
  end
  else
    Msg.Result := LongInt(True);

end;