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

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

Не совсем трэй... [D7, Win95/98, WinME, NT4, Win2k, WinXP]


IrBisoff ©   (2004-03-24 18:48:00) 

Насчёт того, как поместить что-либо в трэй я спрашивать не стану. =)
Вместо этого меня сейчас интересует, как бы наоборот сделать - поместить окно трэя в моё приложение. =\
А то ни одной идеи в голову не лезет, даже не знаю с чего начать..
Да, а ещё и таскбар туда неплохо бы.. Но пока что я обхожусь тем, что кидаю на свой все видимые окна. Не совсем то, но главное что работает. =)
Буду чрезвычайноблагодарен за любую помощь..


DVM   (2004-03-26 16:18:00) [1]


> А можно пример, как это делается ? Я ещё никогда не прехватывал
>  сообщения, адресованные не мне. =(

На этом сайте есть статья про ловушки. Тип ловушки которую надо ставить на окно панели задач: WH_GETMESSAGE.
Еще небольшая подсказка. Если просто поставить ловушку, то отловить можно будет лишь вновь созданные иконки, а вот те которые там уже есть остануться за бортом. Чтобы и их (или хотя бы большинство из них) заполучить надо после установки хука разослать широковещательно сообщение "TaskbarCreated", тогда окна обновят свои иконки (но не все).
И еще. Даже выполнив все что написано выше не удасться заполучить все иконки просто. Дело в том, что вид структуры, которая передается с пом. WM_COPYDATA трею различается в разных системах. Есть три или четыре версии таких структур. Надо это учитывать.
И опять это не все. В вин2000/хп есть так называемые ShellServiceObjects (например регулятор громкости), иконки которых невозможно будет заполучить не подгрузив их еще раз (это COM объекты). Но если их подгрузить еще раз их придется "отнять" у эксплорера (в эксплореровском трее они пропадут). Вот такие вот дела.

Не передумали трей делать? :)


IrBisoff   (2004-03-26 13:08:00) [2]

Спасибо, DVM. Только есть ещё маленький момент. =)


> надо повесить хук на сообщения эксплорера и вылавливать
> те, что относятся к иконкам


А можно пример, как это делается ? Я ещё никогда не прехватывал  сообщения, адресованные не мне. =(


DVM   (2004-03-25 09:24:00) [3]

Создать свое окно с классом Shell_TrayWnd и если эксплорер в данный момент не запущен, то этому вашему окну будут приходить сообщения WM_COPYDATA из которых надо выделить те, что связаны с добавлением/удалением/изменением/и т.д. иконок в область уведомлений.

Если надо сделать так, чтобы это все работало при запущенном эксплорере, то надо повесить хук на сообщения эксплорера и вылавливать те, что относятся к иконкам.

Вобщем вопрос не очень простой.


> Да, а ещё и таскбар туда неплохо бы..

Таскбар же придется создать полностью самому. Как создать кнопку в рунтайм наверное объяснять не надо, а вот создание/удаление/изменение окон надо отслеживать поставив хук WH_SHELL.


Burmistroff   (2004-03-24 20:04:00) [4]

Элементарно - узнаешь названия классов нужных окон (TrayNotifyWnd, Shell_TrayWnd), получешь их хендлы (FindWindow, если не ошибаюсь), затем SetParentWindow


Наверх

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