MFCでWindowsが終了(ログオフ)されるときの処理を書く

Widnowsのユーザーのログオフに応じて、終了処理をするには、

WM_QUERYENDSESSION, WM_ENDSESSION メッセージに応答する処理を書く必要がある。

MFCでは、CWnd::OnQueryEndSession(), CWnd::OnEndSession(BOOL bEnding) をオーバーライドして実装する。

WM_QUERYENDSESSION は、ログオフ前にすべてのプリグラム向けて、
「今終われる?」 と聞くためにWidnowsから送られてくるメッセージ。

これに TRUE (終われるよ~) と返すと、今度は、WM_ENDSESSION が送られてくる。
「じゃ、終わってね~」 というかんじ。

OnEndSession の bEnding は、TRUE (ログオフするよ)、FALSE (やっぱやめ)となる。

つまり、WM_QUERYENDSESSION を送ってから、ログオフに対応出来ないアプリケーションが1つでもある場合(OnQueryEndSession() にFALSEを返す)、OnEnsSession の bEnding が FALSE (やっぱやめ)となる。

---

でも、実際に、この2つのメッセージをちゃんと実装しているプログラムって少ないみたい。
OnEndSession() が呼ばれて、bEnding が TRUE の時だけ終了処理をするはずなのに、
OnQueryEndSession() が呼ばれると、ばたばたと終了処理が始まる。
で、OnEndSession() が FALSE で呼ばれても、ほとんどのプログラムは、
さらにばたばたと終了する。

残るプログラムはわずかだけ。

ログオフに全く応答しないで、強制終了されるよりはましだけどね。
[PR]
by isoq | 2008-09-26 16:00 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< ATOK定額制サービス ツリーコントロールのアイテムを... >>