powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как убрать значек в трее?
25 сообщений из 44, страница 1 из 2
Как убрать значек в трее?
    #33158576
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщемто проблема от кривых рук, но как справится не знаю.
Моя прога запускает другую (программа сворачивается в трей и собирает логи) потом, через некоторое время, убивает ее, но значек остается. Все наверно видели такой баг, когда значек висит и если подвести к нему мышку убирается. Как побороть? Пока сделал чтобы сама программа кликала мышкой по тому месте и значек убирается, но работает не на всех системах...
Убивать пробовал по разному
1. CloseHandle(FSnapshotHandle);
2. SendMessage(FSnapshotHandle, WM_QUIT, 0, 0);
3. SendMessage(FSnapshotHandle, WM_CLOSE, 0, 0);
Результат идентичен.

Viman
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158597
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shell_NotifyIcon + NIM_DELETE
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158606
amnch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй

Refresh;
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158642
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amnchПопробуй

Refresh;Refresh чего? Я закрываю чужую программу. Кроме ее хендла у меня ничего нет...
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158655
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может ты не закрываешь, а принудительно абортируешь.
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158663
amnch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viman
...
Моя прога запускает другую (программа сворачивается в трей и собирает логи) потом, через некоторое время, убивает ее, но значек остается.
...

сорри, недопонял условие, понял что твоя прога сворачивается в трей, а не та которую запускаешь
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158701
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly PodgoretskyМожет ты не закрываешь, а принудительно абортируешь.
принудительно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
function KillTask(ExeFileName: string): integer;
const
  PROCESS_TERMINATE=$ 0001 ;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  result :=  0 ;

  FSnapshotHandle := CreateToolhelp32Snapshot
                     (TH32CS_SNAPPROCESS,  0 );
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,
                                 FProcessEntry32);

  while integer(ContinueLoop) <>  0  do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
         UpperCase(ExeFileName))
     or (UpperCase(FProcessEntry32.szExeFile) =
         UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(OpenProcess(
                        PROCESS_TERMINATE, BOOL( 0 ),
                        FProcessEntry32.th32ProcessID),  0 ));
    ContinueLoop := Process32Next(FSnapshotHandle,
                                  FProcessEntry32);
  end;

//тут испытал  2  способа закрытия
 CloseHandle(FSnapshotHandle);
 SendMessage(FSnapshotHandle, WM_QUIT,  0 ,  0 );
 SendMessage(FSnapshotHandle, WM_CLOSE,  0 ,  0 );
end;

Попробовал Shell_NotifyIcon(NIM_DELETE, @tnid). Ничего не изменилось, хотя не факт что сделал правильно...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
function KillTask(ExeFileName: string): integer;
const
  PROCESS_TERMINATE=$ 0001 ;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  tnid:NOTIFYICONDATA;

begin
  result :=  0 ;

  FSnapshotHandle := CreateToolhelp32Snapshot
                     (TH32CS_SNAPPROCESS,  0 );
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,
                                 FProcessEntry32);

  while integer(ContinueLoop) <>  0  do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
         UpperCase(ExeFileName))
     or (UpperCase(FProcessEntry32.szExeFile) =
         UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(OpenProcess(
                        PROCESS_TERMINATE, BOOL( 0 ),
                        FProcessEntry32.th32ProcessID),  0 ));
    ContinueLoop := Process32Next(FSnapshotHandle,
                                  FProcessEntry32);
  end;


    tnid.cbSize := sizeof(NOTIFYICONDATA);
    tnid.Wnd := FSnapshotHandle;
    tnid.uID :=  0 ;

    tnid.uFlags := NIF_ICON;
    tnid.uCallbackMessage :=  0 ;
    tnid.hIcon :=  0 ;
    Shell_NotifyIcon(NIM_DELETE, @tnid);

  SendMessage(FSnapshotHandle, WM_QUIT,  0 ,  0 );

end;

...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158734
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насилии над системой, ну нельзя же так издеваться
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158742
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viman wrote:

> Refresh чего? Я закрываю *чужую* программу. Кроме ее хендла у меня
> ничего нет...

Похоже, не закрываешь, а убиваешь кирпичом по голове, раз иконка в трее
остаётся ;). Короче, эмулируй прохождение мыши над треем.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158751
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly PodgoretskyНасилии над системой, ну нельзя же так издеватьсяА как корректно выгрузить приложение чужое? Кроме хендла ничего нет...
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158756
Фотография Jetus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


А ті сначала убивай значёк, а потом уже саму программу.

______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158768
zubbitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viman[quot Anatoly Podgoretsky]Насилии над системой, ну нельзя же так издеватьсяА как корректно выгрузить приложение чужое? Кроме хендла ничего нет...[/quo]
А чужое приложение может выгрузить корректно лишь оно само
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158774
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
viman wrote:

> Refresh чего? Я закрываю *чужую* программу. Кроме ее хендла у меня
> ничего нет...

Похоже, не закрываешь, а убиваешь кирпичом по голове, раз иконка в трее
остаётся ;). Короче, эмулируй прохождение мыши над треем.
Posted via ActualForum NNTP Server 1.2
эмулировал :) сначала просто мышкой провел, непомогло. потом еще и кликая при этом, заработало. значек убрался. запустил программу на серваке (у меня система xp sp2, на сервере w2000 server), значек не убирается... ну и фиг с ним, оставил на выходные так, сегодня пришел, там конечно мильон значков и панель задач уехала влево. то есть эмировалась ситация когда пользователь перенес панель задач снизу на левую сторону. о как...
поэтому сразу и написал что сделал КРИВО. :) Первый раз с такой проблемой столкнулся. Кому интересно могу исходник послать. Прога syslog с файрвола собирает.
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158777
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jetus


А ті сначала убивай значёк, а потом уже саму программу.

______________________________
Never Surrender - Nothing Impossible!


Пробовал так, непомогло
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    tnid.cbSize := sizeof(NOTIFYICONDATA);
    tnid.Wnd := FSnapshotHandle;
    tnid.uID :=  0 ;

    tnid.uFlags := NIF_ICON;
    tnid.uCallbackMessage :=  0 ;
    tnid.hIcon :=  0 ;
    Shell_NotifyIcon(NIM_DELETE, @tnid);
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158784
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vimanзапустил программу на серваке (у меня система xp sp2, на сервере w2000 server), значек не убирается... ну и фиг с ним, оставил на выходные так, сегодня пришел, там конечно мильон значков и панель задач уехала влево. то есть эмировалась ситация когда пользователь перенес панель задач снизу на левую сторону. о как...
Так ты еще не только хакер, а еще и террорист.
Кто тебя пустил на сервер?
Почему у вас такой бардак в фирме?
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158788
Фотография Jetus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


Не знаю, может поможет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Снять иконку соединения с интернет из Tray 

 uses  
  shellapi; 

 procedure  TForm1.Button1Click(Sender: TObject); 
 var  
  nt: TNotifyIconData; 
 begin  
   with  nt  do  
   begin  
    cbSize := SizeOf(nt); 
    Wnd    := FindWindow('#32770',  nil ); 
    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 ;


______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158791
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Podgoretsky vimanзапустил программу на серваке (у меня система xp sp2, на сервере w2000 server), значек не убирается... ну и фиг с ним, оставил на выходные так, сегодня пришел, там конечно мильон значков и панель задач уехала влево. то есть эмировалась ситация когда пользователь перенес панель задач снизу на левую сторону. о как...
Так ты еще не только хакер, а еще и террорист.
Кто тебя пустил на сервер?
Почему у вас такой бардак в фирме?мой сервак, что хочу то и делаю :)
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158796
zubbitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть мнение, что поможет перезагрузка, а может reset, сервак тоже утопить в сточной канаве
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158823
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vimanмой сервак, что хочу то и делаю :)
Зеленое, прибито гвоздем с стене, что такое
А это моя селедка, что хочу то и делаю
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158840
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jetus


Не знаю, может поможет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Снять иконку соединения с интернет из Tray 

 uses  
  shellapi; 

 procedure  TForm1.Button1Click(Sender: TObject); 
 var  
  nt: TNotifyIconData; 
 begin  
   with  nt  do  
   begin  
    cbSize := SizeOf(nt); 
    Wnd    := FindWindow('#32770',  nil ); 
    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 ;


______________________________
Never Surrender - Nothing Impossible!

а можно поинтересоваться что за задачу так искали FindWindow('#32770', nil) ?
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158860
Фотография Jetus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viman
а можно поинтересоваться что за задачу так искали FindWindow('#32770', nil) ?
Понятия не имею =)
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158867
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FindWindow('#32770', nil) эта та программа которую и я убиваю... :) все заработало! А говорити телепатов тут нет. Пасиба тебе добрый самаритянин :)

Viman
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158874
Toking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
tnid.cbSize := sizeof(NOTIFYICONDATA);
    tnid.Wnd := FSnapshotHandle;

  tnid.uID :=  0 ;  //не факт 

    tnid.uFlags := NIF_ICON;
    tnid.uCallbackMessage :=  0 ;
    tnid.hIcon :=  0 ;
    Shell_NotifyIcon(NIM_DELETE, @tnid)

Может в приложении устанавливается другой uID иконки.



_______________________________
нет ничего невозможного ... :-)
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158893
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя нет, рано я обрадовался

Viman
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #33158917
Фотография Jetus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vimanFindWindow('#32770', nil) эта та программа которую и я убиваю... :) все заработало! А говорити телепатов тут нет. Пасиба тебе добрый самаритянин :)

На здоровье! =)
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как убрать значек в трее?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]