Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Восстановление иконки в трее. [D7, Win2k, WinXP]


Иван ©   (2003-11-20 14:40:00) 

Всем добрый день. Есть некая программа (П1), которая в трее размещает свою иконку, причем последняя меняется по таймеру. И есть другая программа (П2), которая иногда перегружает (закрывает и открывает) shell (explorer.exe), после чего иконка программы П1 из трея исчезает. Вопрос: как можно её востановить? Или как узнать в П1, что shell был перегружен, т.к простой вызов Shell_NotifyIcon исправил бы эту проблему (желательно чтобы П2 при этом ни чего не сообщал П1).


Владислав   (2003-11-21 17:11:00) [1]

> jonni © (21.11.03 13:24) [6]

К сведению. У меня и так проблем нет.


jonni   (2003-11-21 13:24:00) [2]

da...uzh.....:( vot eto sposob....

a kakaya tebe raznica kakoy explorer stoit???
raschitivay postoyanno na versiyu 6 NOTIFYICONDATA i problem u tebya nikakih nikogda ne budet.... versii explorera nizhe, sami budut razbirat"sya s lishnimi parametrami....
ya proboval... vse rabotaet horosho i ne nuzhno znat" nichego o tom kakoy explorer stoit...

i esche ... skol"ko ne proboval to vsegda Explorer (nachinaya s win98 men"she ne proboval)shlet TaskBarCreated notification pri zagruzke.... vikin" ti svoy timer i reagiruy na soobschenie
i vse budet nomal"no :)


Владислав   (2003-11-20 16:58:00) [3]

Мне много чего неправильно приходится делать из-за того, что я понятие не имею, какой эксплорер установлен у моих покупателей.

Проверяю просто. Следующий код запускается при обработке WM_TIMER.

void UpdateNotifyIcon ()
{
NotifyIcon.uFlags = NIF_ICON;
if (!Shell_NotifyIcon(NIM_MODIFY, &NotifyIcon))
RecreateNotifyIcon();
}


jonni   (2003-11-20 16:09:00) [4]

neprvil"no eto!!! nado prosto reagirivat" na soobschenie TaskBarCreated

tebezhe pravil"no skazali....

a kak ti proveryaesh na nalichie iconci v tray esli ne secret?


Владислав   (2003-11-20 16:05:00) [5]

Я создавал таймер, который срабатывал раз в десять секунд. Если иконки в трее нет, то востанавливал ее.


Иван   (2003-11-20 15:40:00) [6]

Спасибо.

Вырезка из MSDN:

With Microsoft® Internet Explorer 4.0 and later, the Shell notifies applications that the taskbar has been created. When the taskbar is created, it registers a message with the TaskbarCreated string and then broadcasts this message to all top-level windows.


DVM   (2003-11-20 14:58:00) [7]


> Или как узнать в П1, что shell был перегружен,

В новых версиях оболочки при ее запуске рассылается сообщение, что-то вроде "TaskBarCreated", по которому программы должны обновить свои иконки в области уведомлении (трее).
Самые новые версии оболочки умеют после запуска сами восстанавливать потерянные иконки, т.к. где то на диске сохраняют их список (имеется ввиду пропатченная XP и выше).


Наверх

Титульная страница Поиск, карта сайта Написать письмо