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) | その他

掲載広告について

  • 当サイトでは、第三者企業が提供する広告配信サービスを利用しています。
  • このサービスの中には、情報収集の目的で「クッキー」や「ウェブビーコン(クリアGIF)」と呼ばれる技術が使用されている場合があります。
  • それらの技術が使用されている場合、その情報は第三者企業のサーバーに記録されることになり、第三者企業のプライバシーポリシーのもとで管理されることになります。
     ※クッキー … ユーザーのブラウザを識別するための技術。
     ※ウェブビーコン … 特定のページが何回アクセスされたのかを知るための技術。
  • クッキーおよびウェブビーコンは、個人情報に直接結びつくものではありません。また、ここで使用されるクッキーについても、ブラウザの設定で無効化することができます。
  • Adsense広告については、公式プライバシーポリシーをご覧ください。
ランキングへ     posted by 遠雷 | Comment(0) | その他