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

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

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

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

сорри, недопонял условие, понял что твоя прога сворачивается в трей, а не та которую запускаешь
...
Рейтинг: 0 / 0
11.07.2005, 09:56
    #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
11.07.2005, 10:17
    #33158734
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать значек в трее?
Насилии над системой, ну нельзя же так издеваться
...
Рейтинг: 0 / 0
11.07.2005, 10:21
    #33158742
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать значек в трее?
viman wrote:

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

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


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

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

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

Похоже, не закрываешь, а убиваешь кирпичом по голове, раз иконка в трее
остаётся ;). Короче, эмулируй прохождение мыши над треем.
Posted via ActualForum NNTP Server 1.2
эмулировал :) сначала просто мышкой провел, непомогло. потом еще и кликая при этом, заработало. значек убрался. запустил программу на серваке (у меня система xp sp2, на сервере w2000 server), значек не убирается... ну и фиг с ним, оставил на выходные так, сегодня пришел, там конечно мильон значков и панель задач уехала влево. то есть эмировалась ситация когда пользователь перенес панель задач снизу на левую сторону. о как...
поэтому сразу и написал что сделал КРИВО. :) Первый раз с такой проблемой столкнулся. Кому интересно могу исходник послать. Прога syslog с файрвола собирает.
...
Рейтинг: 0 / 0
11.07.2005, 10:30
    #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
11.07.2005, 10:32
    #33158784
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать значек в трее?
vimanзапустил программу на серваке (у меня система xp sp2, на сервере w2000 server), значек не убирается... ну и фиг с ним, оставил на выходные так, сегодня пришел, там конечно мильон значков и панель задач уехала влево. то есть эмировалась ситация когда пользователь перенес панель задач снизу на левую сторону. о как...
Так ты еще не только хакер, а еще и террорист.
Кто тебя пустил на сервер?
Почему у вас такой бардак в фирме?
...
Рейтинг: 0 / 0
11.07.2005, 10:33
    #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
11.07.2005, 10:35
    #33158791
viman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать значек в трее?
Anatoly Podgoretsky vimanзапустил программу на серваке (у меня система xp sp2, на сервере w2000 server), значек не убирается... ну и фиг с ним, оставил на выходные так, сегодня пришел, там конечно мильон значков и панель задач уехала влево. то есть эмировалась ситация когда пользователь перенес панель задач снизу на левую сторону. о как...
Так ты еще не только хакер, а еще и террорист.
Кто тебя пустил на сервер?
Почему у вас такой бардак в фирме?мой сервак, что хочу то и делаю :)
...
Рейтинг: 0 / 0
11.07.2005, 10:35
    #33158796
zubbitto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать значек в трее?
Есть мнение, что поможет перезагрузка, а может reset, сервак тоже утопить в сточной канаве
...
Рейтинг: 0 / 0
11.07.2005, 10:41
    #33158823
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать значек в трее?
vimanмой сервак, что хочу то и делаю :)
Зеленое, прибито гвоздем с стене, что такое
А это моя селедка, что хочу то и делаю
...
Рейтинг: 0 / 0
11.07.2005, 10:45
    #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
11.07.2005, 10:49
    #33158860
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать значек в трее?
viman
а можно поинтересоваться что за задачу так искали FindWindow('#32770', nil) ?
Понятия не имею =)
...
Рейтинг: 0 / 0
11.07.2005, 10:51
    #33158867
viman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать значек в трее?
FindWindow('#32770', nil) эта та программа которую и я убиваю... :) все заработало! А говорити телепатов тут нет. Пасиба тебе добрый самаритянин :)

Viman
...
Рейтинг: 0 / 0
11.07.2005, 10:53
    #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
11.07.2005, 10:57
    #33158893
viman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать значек в трее?
хотя нет, рано я обрадовался

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

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


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