シャットダウン察知するには?

解決


lell  2003-08-29 04:13:34  No: 4495

delphi6pro+XP環境です。
シャットダウンを察知する方法を幾つかサイトで調べたのですが、
どれもNGで動作しませんでした。
・FormCloseQuery
・WMEndSession

未着手
・Form_QueryUnload

ご存知の方がいらしたら教えて頂けますでしょうか。
よろしくお願いします.


にしの  2003-08-29 05:05:01  No: 4496

WM_ENDSESSIONはどこのをとっています?
Formでなく、Applicationのメッセージをとっているのでしょうか。
未確認ですが、WM_ENDSESSIONは「アプリケーションウィンドウ」にメッセージを送るのであって、アプリケーションが持つウィンドウである「フォーム」に対して送ってくるのではないです。


lell  2003-08-29 19:28:16  No: 4497

一応、フォームからです。
コピペであるサイトから取ってきたのですが、下記を記述するだけでokなのかな、、、と素朴な疑問がありますが、、、。(素人みたいですみません)

procedure TForm1.WMEndSession(var Message: TWMEndSession);
begin
  〜〜〜
  end;
end;


にしの  2003-08-29 20:50:51  No: 4498

Formに定義してもOKでした。
# ログオフでのテストでしたが、シャットダウンでも同じでしょう。

もしかして、メッセージの処理に関して勘違いなさっているのでは?
WMEndSessionというプロシージャを用意しただけではだめです。
メッセージ処理する場合は、

  procedure WMEndSession(var Message: TWMEndSession);

という定義ではだめで、

  procedure WMEndSession(var Message: TWMEndSession); message WM_ENDSESSION;

とします。
もちろん、クラス定義の中です。

実体の方は、message WM_ENDSESSIONとつけずに、
procedure TForm1.WMEndSession(var Message: TWMEndSession);
begin
...
end;
でOKです。

message WM_ENDSESSION;が肝で、例えば、
procedure ABC(var msg: TMessage); message WM_ENDSESSION;
でもよいわけです。
プロシージャ名がメッセージを決めているわけではないので。


lell  2003-08-29 23:12:18  No: 4499

にしのさま、

>message WM_ENDSESSION

あなた様の丁重な説明で私は理解できました!
何と感謝して良いのか、、、

これで勤怠(タイムカード)ツール?でPC終了時に現在の時間をDBに
書き出す事ができました。

またmessageについても少し知識が深められました。
(合わせて、もっと勉強せねばと、、)

本当にありがとうございました。


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

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






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