Сейчас на форуме: vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Delete Icon From Tray
Посл.ответ Сообщение

Ранг: 8.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 февраля 2008 00:05
· Личное сообщение · #1

Вобщем проблема такая ....
завершаю чужой процесс зная его pId , но иконка в трее остается ... как ее оттуда удалить ....
повторяю процесс ЧУЖОЙ .... тоесть врядле можно удалить ее ,заюзав

Shell_NotifyIcon(NIM_DELETE,&note);

хотя хз .... может возможно узнать note.uID ???



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 05 февраля 2008 00:07
· Личное сообщение · #2

где-то я уже видел тему об убийстве иконки в трее в чужом процессе




Ранг: 141.4 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 05 февраля 2008 01:02
· Личное сообщение · #3

Av0id:
где-то я уже видел тему об убийстве иконки в трее в чужом процессе


наверное вот тут: Ковыряем Radmin Server - как выкинуть иконку из трея

zx_coder тебе тоже туда



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 05 февраля 2008 01:30 · Поправил: tihiy_grom
· Личное сообщение · #4

zx_coder
Попробуй

var
nt: TNotifyIconData;
begin
with nt do begin
cbSize:= SizeOf(nt);
Wnd:=FindWindow('Класс окна-жертвы', 'Имя окна-жертвы');
uid:= 0;
uFlags:= NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage:= WM_USER + 17;
hIcon:= 0;
szTip:= '';
end;
Shell_NotifyIcon(NIM_DELETE, @nt);
end;

Естественно - до убиения процесса



Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 05 февраля 2008 09:42
· Личное сообщение · #5

гыы... а можно попробовать послать трэйбару сообщение о перерисовке... или о том, что типа мышка наведена )

-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 05 февраля 2008 10:43
· Личное сообщение · #6

Time, код такой же, только вместо Shell_NotifyIcon, PostMessage/SendMessage



Ранг: 11.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 05 февраля 2008 10:48
· Личное сообщение · #7

Как вариант - можно проэмулировать движение мыши над треем, по всей ширине и через 10-12 пикселей по высоте.



Ранг: 8.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 февраля 2008 21:23
· Личное сообщение · #8

не ... код не работает !!!

intro тут не то ..... мне надо програмно из другого процесса удалить сушествующую иконку ....
а там код патчится !!!!!



Ранг: 8.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 февраля 2008 21:26
· Личное сообщение · #9

Twister я пробовал ... но код не работает , если иконка трея скрыта .. те рядом есть кнопка в виде стрелки на которую нажимаешь =)) может остаться .... код не универсален , поэтому в топку

Tim код мессаги о перерисовке можно ????




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 05 февраля 2008 21:56
· Личное сообщение · #10

В аттаче часть исходника эксплорера, отвечающая за трей.
Может быть ты сам найдешь то, что нужно.

79be_05.02.2008_CRACKLAB.rU.tgz - explorer.rar



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 07 февраля 2008 22:40 · Поправил: tihiy_grom
· Личное сообщение · #11

zx_coder
как он не работает, если я специально проверил его перед тем как выложить? Успешно были убиты иконки у DownloadMaster и проги от C-Media.
Ты скорее всего не тот хэндл выбираешь, у процесса может быть несколько дочерних окон

Ради тебя ещё раз проверил и со скрытым трэем и с не скрытым. В любом случае иконка умирает
Найди себе прогу которая мониторит сообщения системы и посмотри в ней, к какому хэндлу привязана твоя иконка




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 08 февраля 2008 07:09 · Поправил: Maximus
· Личное сообщение · #12

tihiy_grom может быть он этот код выполняет ПОСЛЕ того как прибил процесс.
В любом случае у меня вчера тоже встала такая задача, по этому проверю твой код.

P.S: Попробовал до прибития процесса и после, код НЕ работает (Система XPSP2) !!!

Зато заработало так:



program Kill_Bill;

uses
Windows,
ShellApi, Messages;

var HW_Prog, Process: Dword;
nt: TNotifyIconData;

begin
// Если программа запущена, прибиваем
HW_Prog:= FindWindow('Класс', 'Заголовок окна');
if HW_Prog<>0 then begin

// Убиваем иконку из трея
with nt do begin
Wnd:=HW_Prog;
cbSize:= SizeOf(nt);
uid:= 1;
uFlags:= NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage:= WM_USER + 17;
hIcon:= 0;
szTip:= '';
end;
Shell_NotifyIcon(NIM_DELETE, @nt);

// Убиваем прогу
GetWindowThreadProcessID(HW_Prog, @PID);
if PID<>0 then begin
Process := OpenProcess(PROCESS_TERMINATE, False, PID);
if Process<> 0 then begin
TerminateProcess(Process, 0);
WaitForSingleObject(Process, INFINITE);
CloseHandle( Process );
end;
end;
end;
end.


-----
StarForce и Themida ацтой!




Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 08 февраля 2008 13:21 · Поправил: tihiy_grom
· Личное сообщение · #13

Maximus, фиг знает, у меня тоже XPSP2, и всё работает с uid:=0
С uid:=1 не проверял

И какой вообще смысл использовать этот код после убития процесса, если хэндла с иконкой уже нет в системе? Только если действительно трэю сообщение о перерисовке посылать


 eXeL@B —› Программирование —› Delete Icon From Tray
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати