#cpp #c #windows #winapi
Имеется программа, тихо висящая в фоне, без окон, только со значком (временами несколькими, через Shell_NotifyIcon создаваемыми-убиваемыми) в трее. Но при перезапуске проводника (ну, например, сбой какой) эти иконки не восстанавливаются. Подскажите, как корректно организовать при перезапуске проводника перезапуск :) своих иконок в трее?
Ответы
Ответ 1
Подпишитесь на событие 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); } }
Комментариев нет:
Отправить комментарий