Страницы

Поиск по вопросам

вторник, 20 ноября 2018 г.

Восстановление пиктограммы в трее при перезапуске проводника

Имеется программа, тихо висящая в фоне, без окон, только со значком (временами несколькими, через Shell_NotifyIcon создаваемыми-убиваемыми) в трее.
Но при перезапуске проводника (ну, например, сбой какой) эти иконки не восстанавливаются.
Подскажите, как корректно организовать при перезапуске проводника перезапуск :) своих иконок в трее?


Ответ

Подпишитесь на событие TaskbarCreated. Оно вызывается каждый раз при создании связки «Меню «Пуск» — Панель быстрого запуска — Панель задач — Панель уведомлений»; из неё нас интересует только последний пункт.
Объявите где-нибудь глобальную переменную для хранения идентификатора оконного сообщения, соответствующего имени «TaskbarCreated»
static UINT _uTaskbarRestartMessage; Где-нибудь при инициализации приложения необходимо выполнить собственно подписку:
_uTaskbarRestartMessage = RegisterWindowMessage(TEXT("TaskbarCreated")); При получении оконного сообщения с uMsg, равным значению _uTaskbarRestartMessage, необходимо пересоздать все необходимые значки своего приложения так, как мы делали это первый раз при запуске приложения:
LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch(uMsg) { // ...
default: if(uMsg == _uTaskbarRestartMessage) { // Создаём иконки в панели уведомлений return 0; } else return DefWndProc(hwnd, uMsg, wParam, lParam); } }

Комментариев нет:

Отправить комментарий