Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновить System Tray [D5, Win95/98, WinME, NT4, Win2k, WinXP]


MikeZ ©   (2002-08-31 17:39:00) 

Представьте себе, что некая программа была "убита", но ее значок в трее остался. Как обновить этот трей, что-бы значок исчез (как при наведении на этот значок мышкой). Перебирал WM_PAINT и т.п., но может быть, параметры неверны.


MikeZ   (2002-09-02 13:20:00) [1]

Действительно, доступ - полнее некуда. Только осуществляется он на очень материальной основе :-(
А приведенный выше код и так работает на ура. Спасибо


Ученик   (2002-09-01 17:15:00) [2]

Еще вариант:
http://www.madshi.net, madKernel, полный доступ к Tray, останется только разобраться как там это происходит


MikeZ   (2002-09-01 16:57:00) [3]

Да, была у меня идея про передвижение курсора, но подумал, что это слишко не удобно. Но раз все советуют... ;-)))


MikeZ   (2002-09-01 16:57:00) [4]

Да, была у меня идея про передвижение курсора, но подумал, что это слишком не удобно. Но раз все советуют... ;-)))


Ученик   (2002-08-31 23:59:00) [5]

Если очень надо, а так пользоваться не стоит :-)

function FindTrayWnd : HWnd;
var
szClassName : array[0..255] of Char;
begin
Result := FindWindow("Shell_TrayWnd", "");
if Result <> 0 then begin
Result := GetWindow(Result, GW_CHILD);
while Result <> 0 do begin
GetClassName(Result, szClassName, 255);
if StrIComp(szClassName, "TrayNotifyWnd") = 0 then
Exit
else
Result := GetWindow(Result, GW_HWNDNEXT)
end
end
end;

procedure RefreshTrayWnd;
var
i, j : Integer;
Rect : TRect;
SavePos : TPoint;
TrayWnd : HWnd;
begin
TrayWnd := FindTrayWnd;
if TrayWnd <> 0 then begin
GetCursorPos(SavePos);
ShowCursor(False);
GetWindowRect(TrayWnd, Rect);
i := Rect.Left + 5;
while i < Rect.Right do begin
j := Rect.Top + 5;
while j < Rect.Bottom do begin
SetCursorPos(i, j); Sleep(0);
Inc(j, 15)
end;
Inc(i, 15)
end;
SetCursorPos(SavePos.X, SavePos.Y);
ShowCursor(True)
end
end;


MikeZ   (2002-08-31 23:56:00) [6]

Вроде про трей все знают, но как обновить - никто.
Или, может, вспомните?


Наверх

Титульная страница Поиск, карта сайта Написать письмо