memo.xight.org

日々のメモ

Windows でタスクトレイにアイコンが表示されない場合がある

Summary

タスクトレイにアイコンを表示する常駐ソフトウェアで、
時々、タスクトレイにアイコンが表示されない場合がある。

具体的には、Dropbox と ttpmenu。
何かしらのソフトウェアの相性と思って放置していたが、
OSに Shell_NotifyIcon 関数 に起因する問題だった。

Shell_NotifyIcon 関数では、シェルがハングアップしている場合などを考慮し、シェルへの登録作業が 4 秒以内に完了しない場合には失敗したとみなして制御を戻します。この場合、Shell_NotifyIcon 関数は FALSE を返し、GetLastError 関数の返す値は、1460 (ERROR_TIMEOUT) となります。


シェルへの登録作業 (タスクトレイのアイコン表示を含む)が4秒以内に完了しない場合には、
起動元に制御を戻すとのこと。

つまり、タイムアウトした際に、起動元のアプリケーション側で、
タスクトレイへのアイコンを再表示するなどの処理が入っていなければ、
アイコンが表示されないままになる。

解決策としては、Startup EX や sleep.exe などを利用して遅延起動を行えば良い。

Reference

マイクロソフトサポートオンライン - SDK32: 通知領域にアイコンが登録されないことがある
http://support.microsoft.com/kb/418138/ja

スタートアップに登録したソフトがタスクトレイに表示されない - elderrisの日記
http://d.hatena.ne.jp/elderris/20080721/1216622517

その他雑文/タスクトレイを救え! - Ukiwiki
http://ukiya.sakura.ne.jp/index.php?%E3%81%9D%E3%81%AE%E4%BB%96%E9%9B%91%E6%96%87%2F%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%88%E3%83%AC%E3%82%A4%E3%82%92%E6%95%91%E3%81%88%EF%BC%81

StartupEX
http://www.takenet.or.jp/~ryuuji/startup/

Sleep Version 0.1
http://www.piedey.co.jp/softs/sleep001.html