Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
1-49944
Reticent
2002-05-03 13:16
2002.05.16
Совсем простой вопрос :)


14-50095
chernoruk
2002-03-20 23:17
2002.05.16
Перехват TCP пакетов


1-49924
HDD
2002-04-29 15:26
2002.05.16
Undo


3-49856
Chuvi
2002-04-18 19:57
2002.05.16
Какои драйвер использовать BDO тобы считать из DBF фаила русские


1-50050
dim-
2002-05-02 16:39
2002.05.16
Две формы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский