「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;