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

Вниз

Как отрефрешить трей?   Найти похожие ветки 

 
Mutilator   (2004-11-05 10:37) [0]

Есть прога, которая переодически убивает жестко (Terminate process) другую прогу, после чего запускает ее вновь. Этот цикл бесконечен и неважно для чего он сделан. Трабл такой:

Та софтина, которую убивают/запускают имеет в трее свою иконку. Если закрывать ее нормальным способом, то и ее иконка соотв. удалиться из трея. Но если убивать как процесс (из таскманагера, допустим), то иконка останется.

Подскажите, а лучше дайте кусок кода, как отрефрешить програмно трей, чтобы исчезли иконы уже несуществующих программ?

Если непонятно объяснил - скажите - разжую поподробнее..


 
Reindeer Moss Eater ©   (2004-11-05 10:41) [1]

ShellNotifyIcon


 
Mutilator   (2004-11-05 10:50) [2]

Извини, в хелпе про ShellNotifyIcon ничего нет... Как им пользоваться?
Имейте ввиду, что прога, которая имеет иконку в трее не знает, что ее "лупят" - соотв. она сама за собой подчищать ничего не сможет. Подчищать надо той прогой, которая убивает...


 
Reindeer Moss Eater ©   (2004-11-05 10:54) [3]

Извини, но в хелпе про ShellNotifyIcon все есть


 
VMcL ©   (2004-11-05 11:03) [4]

>>Reindeer Moss Eater ©  (05.11.04 10:54) [3]

Про ShellNotifyIcon в справке, конечно, ничего нет. А вот про Shell_NotifyIcon - есть.


 
Reindeer Moss Eater ©   (2004-11-05 11:09) [5]

Какая разница?
Все равно это ему не поможет.


 
VMcL ©   (2004-11-05 12:01) [6]

>>Reindeer Moss Eater ©  (05.11.04 11:09) [5]

Время покажет...


 
Reindeer Moss Eater ©   (2004-11-05 12:22) [7]

Время покажет, что он не знает идентификаторов, с которыми иконки "запузыривались в трей".
Правда остается брутфорс


 
KSergey ©   (2004-11-05 12:42) [8]

Я дал неверный ответ, который, будь даже и верным, в любом случае неприменим... Зашибись.

Я могу дико ошибаться, но какое-то смутное у меня воспоминание осталось от обсуждения подобного ворпса на форуме - вроде советовали найти окно трея (которое имеет стандартные парамтеры типа имени класса) и отрефрешить его...


 
KSergey ©   (2004-11-05 12:43) [9]

Первая строчка - к Reindeer Moss Eater, если что.


 
MacroDenS ©   (2004-11-05 13:28) [10]

Можно рассылать сообщение рабочему столу на UpDate (кнопка F5), но тогда могут возникнуть проблемы с мерцанием, если прога запускается/убивается достаточно быстро.


 
Reindeer Moss Eater ©   (2004-11-05 13:33) [11]

>KSergey ©   (
Подскажите, а лучше дайте кусок кода, как отрефрешить програмно трей, чтобы исчезли иконы уже несуществующих программ?

Так вот. "Рефрешить" трей можно до посинения.
Если Shell_NotifyIcon не вызвана что бы убрать иконку, то икона там останется.

Спрашивали как убрать.
Я ответил как убрать.
То, что у автора нет необходимых данных что бы воспользоваться ответом - проблема не моя.

Я дал неверный ответ, который, будь даже и верным, в любом случае неприменим... Зашибись.

Хочешь - зашибись себе наздоровье.


 
KSergey ©   (2004-11-05 13:37) [12]

> [11] Reindeer Moss Eater ©   (05.11.04 13:33)
> Я дал неверный ответ, который, будь даже и верным, в любом
> случае неприменим... Зашибись.
>
> Хочешь - зашибись себе наздоровье.

"Зашибись" в данном случае - не глагол ;)
Впрочем, мое высказывание было в том смысле, что в [5] не была признана очепятка.


 
sniknik ©   (2004-11-05 15:43) [13]

> вроде советовали найти окно трея (которое имеет стандартные парамтеры типа имени класса) и отрефрешить его...
не видел обсуждения но сам пробовал, не получилось, т.е. рефреш посылается и даже перерисовывается но "пустые" иконки не убирает, получилось только эмуляцией "проведения" мыши над этим окном. (найти код можно, только он дома (вот всегда так когда дома то о рабочем коде вспоминаеш ;), впрочем он может быть и потерян... в виду не особо большой ценности (просто эксперимент))


 
DiamondShark ©   (2004-11-05 19:09) [14]

Вот так "отрефрешить трей":


procedure TForm1.Button1Click(Sender: TObject);
var
 wnd: HWND;
 R: TRect;
 y: integer;
 x: integer;
 SH, SW: integer;
 M: TPoint;
begin
 GetCursorPos(M);

 SW := GetSystemMetrics(SM_CXSCREEN);
 SH := GetSystemMetrics(SM_CYSCREEN);

 wnd := FindWindow("Shell_TrayWnd", nil);
 wnd := FindWindowEx(wnd, 0, "TrayNotifyWnd", nil);
 Windows.GetClientRect(wnd, R);
 MapWindowPoints(wnd, 0, R, 2);
 y := (R.Top + R.Bottom) div 2;
 for x := R.Left to R.Right do
   begin
     mouse_event(MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE,
       x * 65535 div SW,
       y * 65535 div SH,
       0, 0);
     sleep(0);
   end;

 SetCursorPos(M.x, M.y);
end;


 
sniknik ©   (2004-11-05 23:18) [15]

DiamondShark ©   (05.11.04 19:09) [14]
немного не то, заметен шлейф мыши и мигание.
у меня получше получилось
(на всякий случай, писалось/тестировалось только в w2k)

function FindToolbar: HWnd;
begin
 Result:= FindWindow("Shell_TrayWnd", "");
 if Result = 0 then Exit;
 Result:= FindWindowEx(Result, 0, "TrayNotifyWnd", nil);
 if Result = 0 then Exit;
 Result:= FindWindowEx(Result, 0, "ToolbarWindow32", nil);
end;

procedure RefreshTray;
var
 i: Integer;
 Rect: TRect;
 TrayWnd: HWnd;
begin
 TrayWnd:= FindToolbar;
 if TrayWnd <> 0 then begin
   GetWindowRect(TrayWnd, Rect);
   i:= Rect.Right - 5;
   while i > Rect.Left do begin
     SendMessage(TrayWnd, WM_MOUSEMOVE, 0, MakeLong(i - Rect.Left, 5));
     Dec(i, 10)
   end
 end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 RefreshTray;
end;


 
Ученик   (2004-11-05 23:25) [16]

А еще панель задач может быть вертикальной :-)


 
sniknik ©   (2004-11-05 23:36) [17]

> А еще панель задач может быть вертикальной :-)
да, и тогда тому кому это нужно придется взять и исправить под свои нужды... ;о))

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



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

Форум: "Основная";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.041 c
3-1098525809
Etwas
2004-10-23 14:03
2004.11.21
Выбор записей с помощью CheckBox


1-1099937284
Змей
2004-11-08 21:08
2004.11.21
Горячая клавиша


1-1099878310
magasoft
2004-11-08 04:45
2004.11.21
Анализ скорости выполнения кода


1-1099854492
snake1977
2004-11-07 22:08
2004.11.21
Смешивание цвета


1-1099488033
Stype
2004-11-03 16:20
2004.11.21
Каким оператором запустить любую программу ?





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