Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.16;
Скачать: CL | DM;

Вниз

SysTray   Найти похожие ветки 

 
nimble   (2002-03-14 05:08) [0]

Прошу прощения, вопрос изначально был задан не врено!
Люди добрые, поможите!
Как сделать так, чтобы иконка чужой проги (пусть WinAmp)в SysTray исчезла, но прога не умерла!!!
Заранее благодарен!!!


 
Fellomena   (2002-03-14 12:30) [1]

Инструмент один - Win32API.
Попробуй так:
получаешь дескриптор панели задачь (лекго), получить дескриптор нужной тебе иконки (если она имеет дескриптор),
и если таковой имеется - просто SendMessage(Tray_handle, WM_CLOSE, 0, 0);
или можно попробовать WindowState(Tray_handle, WS_HIDE);

Хотя это только мои домыслы - конкретно это я не делала. (но с кнопкой Пуск развлекалась - вышепреведённая схема работает =)


 
Nebula   (2002-03-14 12:54) [2]

Tray - это Toolbar, а иконки - Buttons. Поэтому работаем с ним как с обычным Toolbar. Через сообщение TB_DELETEBUTTON.

Расположение окон:
Shell_TrayWnd
- TrayNotifyWnd
- ToolbarWindow32

FTrayToolbar := FindWindowEx(FindWindowEx(FindWindow("Shell_TrayWnd", ""), 0, "TrayNotifyWnd", ""), 0, "ToolbarWindow32", "");
SendMessage(FTrayToolbar, TB_DELETEBUTTON, ButtonIndex, 0);



 
Fellomena   (2002-03-14 12:59) [3]

2 Nebula:
угу, теперь понятно.
Значит они точно handle не имеют.
А можно эти иконки идентифицировать не по индексу, а по какому-либо ещё критерию ?
Ведь порою некоторые программы вставляют и удаляют свои иконки достаточно быстро...


 
Nebula   (2002-03-14 13:12) [4]

см help по Toolbar, все что найдешь - все твое. Только маленькое дополнение - это win32 control, т.е. появился с Windows 95, а значит у вас разные адресные пространства и как следствие - невозможность передавать указатели в сообщениях. :( Хотя методы, конечно, есть, но это совсем другая сказка. А эта кончилась, все плохие иконки убили, все хорошие - погибли в бою...


 
paul_shmakov   (2002-03-14 15:09) [5]

2 Fellomena (14.03.02 12:59):
можно глобальным хуком перехватывать попытки что-либо делать с иконками в трее.
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1015937269&n=5


 
Fellomena   (2002-03-14 17:09) [6]

2 paul_shmakov: угу... тоже дело, спасибо за линк 8)


 
Raptor   (2002-03-14 19:56) [7]

Да, народ, ну и наворотили же вы тут. Даже хуки задействовали. :-))
Я, конечно, не спорю. Можно и так. Но лично я такую проблему проще решал. Стандартными, так сказать, методами. Идея проста. Раз прога установила иконку в трей и удаляет ее оттуда при выходе, то почему я немогу от ее имени этого сделать?
Ну вот и делаю:

Var FIconData:TNotifyIconData;
.......................
With FIconData Do Begin
cbSize:=SizeOf(FIconData);
Wnd:=FindWindow("здесь класс окна, которое установило иконку",
"здесь заголовок окна");
uID:=<здесь ставим ID иконки>;
uFlags:=NIF_ICON;
End;
i:=Shell_NotifyIcon(NIM_DELETE,@FIconData);

Главная проблема здесь найти ID иконки (мы же не знаем какой ID поставила прога, установившая иконку). Но эта проблема легко решается. Например так:

While not Shell_NotifyIcon(NIM_DELETE,@FIconData) Do Begin
FIconData.uID:=FIconData.uID+1;
End;
ID:=FIconData.uID;

Например для WinAmp 2.78 праметры такие
Класс="Winamp v1.x"
uID=502


 
paul_shmakov   (2002-03-15 05:47) [8]

2 Raptor:
ну я как раз для определения uID и предлагал хуки использовать :)
uID - это DWORD... перебор от 0 до 4294967296 с посылкой сообщения - не самый шустрый вариант, но все же вариант.
хотя для такой простой задачи можно действительно поперебирать идентификаторы. для более сложных вещей лучше использовать хук (см.выше).


 
Raptor   (2002-03-15 11:42) [9]

Все правильно, только вот перебор этот надо сделать только один-единственный раз. Только что бы найти его, этот номер. Потом просто использовать его для удаления иконки. Он ведь константа и никогда не меняется.
А по поводу DWORD-а, так я никогда еще не встречал uID больше чем 1000. Хотя все возможно. ;-)


 
paul_shmakov   (2002-03-15 11:49) [10]

да, полностью согласен. способ простой и действенный.



Страницы: 1 вся ветка

Текущий архив: 2002.05.16;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.006 c
1-49917
rdm
2002-05-02 17:42
2002.05.16
PasswordChar в TEdit


1-50003
DiGiTaL
2002-04-27 18:34
2002.05.16
Как перехватить EOleException?


1-49903
MisterBin
2002-05-02 16:31
2002.05.16
Полноэкранный режим как в играх


14-50092
FLIZ
2002-04-06 00:58
2002.05.16
видел сегодня в метро рекламу RSDN - журнала. Понравилась!


3-49852
Baran
2002-04-19 11:04
2002.05.16
ADO - выбор стратегии





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский