AsuYuHomepage
トップページ サイトの説明 子供の成長記録 JM BAR Delphi リンク集
Home>>プログラミング>>Tips&Tricks>>Windows終了時(シャットダウン)に処理をする
Delphi入門
Delphi Tips
Delphi Win32API
ダウンロード

Counter

Delphi Tips & Tricks

Windows終了時(シャットダウン)に処理をする

 常駐ソフトなどはウィンドウズ終了時に何らかの処理をしたい場合がありますが、このためにはTFormのOnCloseQueryにイベントを書くだけでは足りません。ウィンドウズ終了時にフォームに送られてくるWM_QUERYENDSESSION メッセージを処理することが必要です。
privart
  FQueryEndSession : boolean;
  procedure WMQueryEndSession(var Msg: TWMQueryEndSession);
        message WM_QUERYENDSESSION;
-----------------------------------------------------------
procedure TForm1.WMQueryEndSession(var Msg:TWMQueryEndSession);
begin
  FQueryEndSession := true;
  inherited;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if FQueryEndSession then begin
    FQueryEndSession := false;
    //
    //ウィンドウズが終了する場合の処理
    // 
  end;

  if CanClose then
  begin
    //
    //普通にフォームが閉じられた場合の処理
    // 
  end;
end;

 フォームにWM_QUERYENDSESSIONが送られてきたときに、FQueryEndSessionのフラグをtrueにしておきます。
そしてフォームのOnCloseQueryイベントでFQueryEndSessionの値をを確認し、trueならWindows終了時だと判断して、FQueryEndSessionに falseを代入したあと処理をおこないます。