Статьи Королевства Дельфи


Как появляются иконки в трее. - часть 2


В случаях ошибки нужно информировать приложения про необходимость поместить иконки обратно. Для этого послужат такие действия:

procedure TForm1.FormCreate(Sender: TObject); var WM_TASKBARCREATED: UINT; begin WM_TASKBARCREATED := RegisterWindowMessage('TaskbarCreated'); PostMessage(HWND_BROADCAST, WM_TASKBARCREATED, 0, 0); end;

Не все приложения реагируют на такое сообщение.

Скачать демо проект (9.8K)

И несколько слов о демо проекте.

ВНИМАНИЕ!!! Следуйте данным инструкциям только в том случае, если Вы ясно понимаете смысл действий!!!

Повторюсь: Shell_NotifyIconW сообщение посылает только одному окну. Поэтому чтобы увидеть результаты работы демопроекта, загружать его надо без или вместо explorer'а.

Первый вариант (для Win9x): Пример: файл %windir%\system.ini изменить следующим образом:

Найти строчку:
shell=explorer.exe Заменить на (предполагается что демопроект находится в C:\Demotray\ ) : ;shell=explorer.exe shell=c:\demotray\demotray.exe Перегрузите Windows
Для возврата explorer'a раскомментируйте первую строчку, закомментируйте или удалите вторую.

Второй вариант: Лично я использую Far для выгрузки Explorer.exe

  • 1) Загружаем IDE Delphi и демопроект
  • 2) Загружаем Far, F11->Process list->
    выбираем EXPLORER.EXE->F8->OK
  • 3) Отлаживаем проект
  • 4) Для появления Explorer'a просто запустите его.

Используйте эти инструкции на свой страх и риск. Прочитайте их дважды. Внимательно изучите исходники. Трижды.

Инструкции по закрытию EXPLORER.EXE действительны для Win9x.

Если у Вас NT - разберитесь сами. Если не сможете разобратся - то за такие проекты Вам браться рановато.

Гревные ругательства "А у меня после ... ничего не работает!" не принимаются.

Благодарности:

  • Paul Shmakov - реверсинг Shell_NotifyIcon, моральная поддержка.
  • Стив Тейксейра & Ксавье Пачеко - литература.
  • Особая благодарность обоим использованым алфавитам.

Богдан Минич

Смотрите также:

  • Добавить "иконку" приложения в область SysTray.




Начало  Назад  Вперед