2015-08-17 1 views
3

У меня есть приложение Win32, которое добавляет значок панели задач при запуске.Как восстановить «отсутствующий» значок уведомлений при перезапуске explorer.exe?

Работает отлично, за исключением случаев, когда Explorer сработает, а затем перезагрузится, мое приложение продолжает работать, но значок панели задач исчез.

Я подозреваю, что я должен обрабатывать какое-то событие, но что?

ответ

3

Что вы имеете в виду, на самом деле известны как значки уведомлений. Важно правильно использовать эту терминологию, чтобы мы знали, что вы имеете в виду. Во всяком случае, я думаю, что моя догадка верна.

Вам необходимо прослушать оконное сообщение, которое передается во все окна верхнего уровня при создании панели задач. Это documented примерно так:

С помощью Microsoft Internet Explorer 4.0 и более поздних версий Shell уведомляет приложения о создании панели задач. Когда панель задач создается, она регистрирует сообщение с строкой TaskbarCreated и затем передает это сообщение во все окна верхнего уровня. Когда ваше приложение панели задач получает это сообщение, оно должно предположить, что все значки панели задач, которые были добавлены, были удалены и снова добавлены. Эта функция обычно применяется только к службам, которые уже запущены при запуске Shell. В следующем примере показан очень упрощенный метод обработки этого случая.

LRESULT CALLBACK WndProc(HWND hWnd, 
         UINT uMessage, 
         WPARAM wParam, 
         LPARAM lParam) 
{ 
    static UINT s_uTaskbarRestart; 

    switch(uMessage) 
    { 
     case WM_CREATE: 
      s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated")); 
      break; 

     default: 
      if(uMessage == s_uTaskbarRestart) 
       AddTaskbarIcons(); 
      break; 
    } 

    return DefWindowProc(hWnd, uMessage, wParam, lParam); 
}