常駐アイコンが消えないプログラムの作り方 for Windows (開発者向け)

ふと気づくとタスクトレイの常駐アイコンが半分くらい消えてしまっていることがあります。隠れているのではなくて消えてしまっています。

全部消えるのではなく、残るのと消えるのがあるのはなぜでしょう? 

消えるのは時の運? いつも残るのは運がいいソフト? なぜうちのは必ず消える? 運が悪い?

と思っている開発者のための記事です。

あなたが開発者ではなくてユーザーで、常駐アイコンが消えるソフトにお困りの場合は、開発元にこのページのことを教えてあげたら直すかもしれません(聞く耳持たないかもしれません)。

話はすごく簡単

なんらかの原因でシェルが異常終了することがあります。シェルはすぐに自動的に再起動されますがタスクトレイに登録されたアイコンは全部消えた状態になります。

シェルはすべてのアプリケーションのトップレベルウィンドウにメッセージを送ってタスクトレイアイコンの登録しなおしを促します。

そのメッセージを受けてアイコンを登録しているプログラムはアイコンが残っているように見えます。

消えるのはメッセージを処理していないプログラムです。あなたのプログラムがこれをしていないなら消えるのは当然なのです。プログラムがWM_PAINTに応答しなかったらウィンドウ内容が消えてしまうのと同じことです。

メッセージ

シェル再起動されたときに送られるのは"TaskbarCreated"というメッセージです。詳しくはぐぐってください。

常駐アイコンの登録はプログラム起動時とこのメッセージが来たときの両方で行います。

テスト

コマンドプロンプトを開く→タスクマネージャーのプロセスタブからexplorer.exeを選んでプロセス終了→コマンドプロンプトでexplorerと入力するとシェル再起動のテストができますので、他のアイコンは消えてもあなたのプログラムのアイコンが消えないようになったことを確認してください。