![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Убрать чужую иконку из трея [D5, Win95/98]
Zevsus © (2002-11-22 13:07:00)Здравствуйте!
Мне нужно убрать из трея чужую иконку.
делаю так:
procedure TForm1.Button1Click(Sender: TObject);
VAR
Wnd : hWnd;
a: PNotifyIconData;
begin
//////////////////////////////////
//Нахожу хэндл нужного мне окна///
//////////////////////////////////
a.Wnd:=Wnd;
a.cbSize:=sizeof(NOTIFYICONDATA);
Shell_NotifyIcon(NIM_DELETE, a);
end;
не убирается :(
paul_shmakov (2002-11-22 13:49:00) [1]все верно, потому как еще и id нужно в структуре указать.
есть несколько вариантов решения.
1) (про этот способ я тут писал более подробно, так что где-то в архиве есть). когда вызывается Shell_NotifyIcon, в окно трея посылается сообщение WM_COPYDATA. можно перехватывать это сообщение. в качестве данных в WM_COPYDATA передается структура
TNIDMessage = packed record
Magic: DWord; // всегда равно $34753423
Message: DWord; // NIM_ADD, NIM_MODIFY или NIM_DELETE
NID: TNotifyIconDataW;
end;
на самом деле есть несколько версий этой структуры, которые отличаются типом поля NID (TNotifyIconDataA, TNotifyIconDataW, плюс существует 3 версии структуры TNotifyIconData). но для вашей задачи эта разница не важна, т.к. вам нужно поле TNotifyIconData.uID, а оно во всех версиях находится по одному и тому же смещению.
так вот, перехватывайте с помощью хуков эти сообщения, запоминайте пару hWnd и uID и вы сможете уирать и модифицировать чужие иконки.
по этому примеру Богдан Минич написал пример своего трея, правда написал плохо и криво. все мои пожелания довести его до ума он проигнорировал :) но все равно, взгляните:
http://www.delphikingdom.com/treasury/systray.htm
обязательно комментарии еще прочтите.
2) Nick Repin нашел способ перечислять иконки в трее.
http://skyscraper.fortunecity.com/gigo/311/winprog.html#strayenum