アプリケーションの終了をするには

解決


アライグマ助かる  2010-01-07 20:32:04  No: 36782

アプリケーションが終了する場合トレイアイコンの
左クリックでメニューの表示
右クリックでポップアップメニューを表示して終了ボタンをクリックしたときだけ
終了するようにし、システム(ウィンドウのx)ボタンはメニューを隠すだけで、
終了しないようにするために以下のようにしています。

ExitFlag: Boolean;

ExitFlag := false;

// 終了確認
procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean)
begin
  if ExitFlag = false then Hide;
  CanClose := ExitFlag;
end;

procedure TFormMain.MenuItemExitClick(Sender: TObject)
begin
  //  編機データクラス破棄
  ExitFlag := true;
  Close;
end;

ここでですが、上記の処理の仕様のままでPCをシャットダウンする場合に
現状では終了できません。
PCのシャットダウン時はアプリケーションを自動的に終了したいのですが
どうすればよいでしょうか?

理由は、ネットワーク経由で ShutDown コマンドを使ってPCの電源を
落としたいのです。


DEKO  2010-01-07 21:25:24  No: 36783

こんにちは。
以下の様な感じで WM_QUERYENDSESSION を捕捉すればいいのではないでしょうか?

  private
    { Private 宣言 }
    procedure QueryEndSession(var Msg : TWMQueryEndSession); message WM_QUERYENDSESSION;

...

// Windows の終了を検知する
procedure TFormMain.QueryEndSession(var Msg : TWMQueryEndSession);
begin
  Msg.Source := 1;
  MenuItemExitClick(nil);
end;

# shutdown.exe に -f オプションを付けるというテもありますが。


アライグマ助かる  2010-01-12 21:18:13  No: 36784

ありがとうございます。
終了するようになりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加