delphi6pro+XP環境です。
シャットダウンを察知する方法を幾つかサイトで調べたのですが、
どれもNGで動作しませんでした。
・FormCloseQuery
・WMEndSession
未着手
・Form_QueryUnload
ご存知の方がいらしたら教えて頂けますでしょうか。
よろしくお願いします.
WM_ENDSESSIONはどこのをとっています?
Formでなく、Applicationのメッセージをとっているのでしょうか。
未確認ですが、WM_ENDSESSIONは「アプリケーションウィンドウ」にメッセージを送るのであって、アプリケーションが持つウィンドウである「フォーム」に対して送ってくるのではないです。
一応、フォームからです。
コピペであるサイトから取ってきたのですが、下記を記述するだけでokなのかな、、、と素朴な疑問がありますが、、、。(素人みたいですみません)
procedure TForm1.WMEndSession(var Message: TWMEndSession);
begin
〜〜〜
end;
end;
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;
でもよいわけです。
プロシージャ名がメッセージを決めているわけではないので。
にしのさま、
>message WM_ENDSESSION
あなた様の丁重な説明で私は理解できました!
何と感謝して良いのか、、、
これで勤怠(タイムカード)ツール?でPC終了時に現在の時間をDBに
書き出す事ができました。
またmessageについても少し知識が深められました。
(合わせて、もっと勉強せねばと、、)
本当にありがとうございました。
ツイート | ![]() |