このアイコンから何か操作するようにしていると、アイコンが消えた後は何も操作出来なくなり、タスクマネージャなどから終了させるしかなくなります。
そこで、エクスプローラが再起動し、通知領域が作成されたら再びアイコンを登録する方法を紹介します。
通知領域はタスクバー上にあり、タスクバーが作成された時に、"TaskbarCreated"という文字列によって登録されたメッセージを、タスクバー作成前から実行されているトップレベルウインドウに送られます。
ちょっとややこしい言い回しですが、要するに、登録していたものが消えた場合は、タスクバーが作成されたときメッセージが来ます。
肝心のコードですが、「WindowProc」をオーバーライドし、そこでメッセージを受信したとき再登録処理をする、という感じになります。
LRESULT CXXXDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)ここで、メッセージID用の静的変数は、メンバ変数にしておいて「OnInitDialog」あたりで登録してもいいと思います。
{
static UINT uiTaskbarRestart; // メッセージID用の静的変数
if(message == WM_CREATE)
{
uiTaskbarRestart = RegisterWindowMessage(_T("TaskbarCreated"));
}
else if(message == uiTaskbarRestart)
{
// 通知領域へのアイコン再登録処理
}
return CDialog::WindowProc(message, wParam, lParam);
}
テストする時は、タスクマネージャから「explorer.exe」を終了させ、「新しいタスクの実行」から「explorer.exe」と入力して再起動させます。
ただし、再登録機能を実装していないアプリは、消えたままになるので注意が必要です。
まぁ、その時はWindowsを再起動して下さい。