MFC   VC++   Visual Studio   Visual Studio   プログラミング

通知領域のアイコン再登録

 常駐ソフトなどで通知領域へアイコンを登録した後、エクスプローラが何かの理由で再起動された場合、登録してあったアイコンは消えて無くなります。
 このアイコンから何か操作するようにしていると、アイコンが消えた後は何も操作出来なくなり、タスクマネージャなどから終了させるしかなくなります。
 そこで、エクスプローラが再起動し、通知領域が作成されたら再びアイコンを登録する方法を紹介します。

 通知領域はタスクバー上にあり、タスクバーが作成された時に、"TaskbarCreated"という文字列によって登録されたメッセージを、タスクバー作成前から実行されているトップレベルウインドウに送られます。
 ちょっとややこしい言い回しですが、要するに、登録していたものが消えた場合は、タスクバーが作成されたときメッセージが来ます。

 肝心のコードですが、「WindowProc」をオーバーライドし、そこでメッセージを受信したとき再登録処理をする、という感じになります。
LRESULT CXXXDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    static UINT uiTaskbarRestart;    // メッセージID用の静的変数
    if(message == WM_CREATE)
    {
        uiTaskbarRestart = RegisterWindowMessage(_T("TaskbarCreated"));
    }
    else if(message == uiTaskbarRestart)
    {
        // 通知領域へのアイコン再登録処理
    }

    return CDialog::WindowProc(message, wParam, lParam);
}
 ここで、メッセージID用の静的変数は、メンバ変数にしておいて「OnInitDialog」あたりで登録してもいいと思います。

 テストする時は、タスクマネージャから「explorer.exe」を終了させ、「新しいタスクの実行」から「explorer.exe」と入力して再起動させます。
 ただし、再登録機能を実装していないアプリは、消えたままになるので注意が必要です。
 まぁ、その時はWindowsを再起動して下さい。
ランキングへ     posted by 遠雷 | Comment(0) | その他
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。