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

解決


ryo  2003-04-03 21:38:26  No: 51263

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


YuO  2003-04-03 22:47:05  No: 51264

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


ryo  2003-04-03 23:01:29  No: 51265

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

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

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


ryo  2003-04-04 04:29:08  No: 51266

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

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


DotL  2003-04-04 06:30:10  No: 51267

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


ryo  2003-04-04 21:35:14  No: 51268

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

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

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


nr  2003-04-05 02:00:25  No: 51269

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


ryo  2003-04-05 04:20:41  No: 51270

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-06 03:27:36  No: 51271

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


DotL  2003-04-06 03:33:56  No: 51272

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


ryo  2003-04-07 21:38:35  No: 51273

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

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


YuO  2003-04-07 21:49:18  No: 51274

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

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


ryo  2003-04-09 21:39:57  No: 51275

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

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

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


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

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






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