Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
ВнизУбрать чужую иконку из трея Найти похожие ветки
← →
Zevsus (2002-11-22 13:07) [0]Здравствуйте!
Мне нужно убрать из трея чужую иконку.
делаю так:
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) [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
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c