VC6(MFC)でアプリ強制終了時処理について

解決


ryo  2003-04-03 12:38:26  No: 51263  IP: [192.*.*.*]

VC6にて常駐アプリを作りたいのですが
アプリ起動時のタスクトレイにアイコン追加
アプリ終了時のタスクトレイのアイコン削除
は正常にいくのですが
アプリを強制終了(Ctrl+Alt+Delete)させると
アイコンが残ったままです。
アプリが落ちた時にタスクトレイアイコンを削除する
場合はどこに削除処理をいれるとようのでしょうか

編集 削除
YuO  2003-04-03 13:47:05  No: 51264  IP: [192.*.*.*]

強制終了ですから,どうしようもないです。
強制終了時に何らかのアクションがとれると,強制終了になりません。

編集 削除
ryo  2003-04-03 14:01:29  No: 51265  IP: [192.*.*.*]

回答ありがとうございます

>強制終了時に何らかのアクションがとれると,強制終了になりません。
これって実際どんな風にすればよいのでしょう

通常の常駐ソフト(付箋紙とか)を強制終了させると
トレイアイコンも消えてくれます。
そんな感じにしたいのですが?
→その開発者に聞けばって感じですかねえ

編集 削除
ryo  2003-04-03 19:29:08  No: 51266  IP: [192.*.*.*]

>>強制終了時に何らかのアクションがとれると,強制終了になりません。
>これって実際どんな風にすればよいのでしょう

すいません。
なんか、勘違いしていました。
たしかにそうですね。

編集 削除
DotL  2003-04-03 21:30:10  No: 51267  IP: [192.*.*.*]

もうひとつ監視用のアプリケーションを常駐させて、そのソフトが終了したら、アイコンを削除して、自分自身も終了するというのはだめですか?
(MFCだからあまり使えないかも...)

編集 削除
ryo  2003-04-04 12:35:14  No: 51268  IP: [192.*.*.*]

DotLさん回答ありがとうございます。

>もうひとつ監視用のアプリケーションを常駐させて、そのソフトが終了したら、>アイコンを削除して、自分自身も終了するというのはだめですか?
この場合、監視アプリが終了させられたら駄目だし、
アイコン削除用だけのアプリを起動させて、リソースの無駄の
ような気がするのですが

通常の常駐ソフトとかではうまくいっているので
手はあるとおもうんですけど、

編集 削除
nr  2003-04-04 17:00:25  No: 51269  IP: [192.*.*.*]

Ctrl+Alt+Deleteでの強制終了って最初にWM_CLOSEが来て
それでも終了しなければ強制的に殺しに来る
という動作だったような気がします。

編集 削除
ryo  2003-04-04 19:20:41  No: 51270  IP: [192.*.*.*]

nrさん  回答ありがとうございます

>Ctrl+Alt+Deleteでの強制終了って最初にWM_CLOSEが来て
>それでも終了しなければ強制的に殺しに来る
>という動作だったような気がします。
あ、消えました。ありがとうございます。

と、思ったら今度、追加処理を消しても消えるようになった???
(WM_CLOSEがきたらShell_NotifyIcon(NIM_DELETE, &m_stN)を発行)
→「CDialog::OnClose()」の中で自動的に消してんのかなあ
と思ってそれも消してみたんだけど、やっぱりアイコン消える
追加したとこ消しても、やっぱりアイコン消える
当初の目的(トレイアイコンを消す)は達成したのですが、
どうして消えるようになったのか良くわかりません
なんでですかねえ
  追加動作
    1.メッセージハンドラの追加→WM_CLOSE(OnClose())
    2.その中にShell_NotifyIcon(NIM_DELETE, &m_stN)を追加
    3.「WindowProc」にも「WM_CLOSE」がきたら削除処理を追加

編集 削除
DotL  2003-04-05 18:27:36  No: 51271  IP: [192.*.*.*]

関係ないかもしれませんが、
NT系ではWM_CLOSEは来ないと思います。

編集 削除
DotL  2003-04-05 18:33:56  No: 51272  IP: [192.*.*.*]

NT系で、どうやらプロセス強制終了されるとメッセージは一切ないようです。(当たり前ですが...)

編集 削除
ryo  2003-04-07 12:38:35  No: 51273  IP: [192.*.*.*]

DotLさん  回答ありがとうございます

>NT系ではWM_CLOSEは来ないと思います。
開発環境はWin98なのですが
本ツールを使用する環境がWinNTとかWin2Kとかなんで
どうしましょ
他の人ってどうやってるのかなあ?

編集 削除
YuO  2003-04-07 12:49:18  No: 51274  IP: [192.*.*.*]

NT系でプロセスを強制終了しようとしているならば,
#タスクマネージャのプロセスタブから終了させた場合
諸々の不具合が出ることはシステムからメッセージが出ているので知っているものと考えています。
つまり,私が作った場合は強制終了に対する処理は一切していません。

ちなみに,NT系のタスクマネージャでアプリケーションタブから終了させる場合は,まずWM_CLOSEがきます。

編集 削除
ryo  2003-04-09 12:39:57  No: 51275  IP: [192.*.*.*]

一応以下で解決にしようと思います

  WM_CLOSEがきたときアイコン削除処理をする
  但し、それでも駄目なときはあきらめる(再起動かアイコンをそのまま)
  →基本的に強制終了とかプログラムが落ちるとかを意識しない
    (もちろん最低限の終了処理は行うが)

なお、回答をくださった皆様にはお礼を申し上げます。

編集 削除