Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.12;
Скачать: CL | DM;

Вниз

System Tray иконки   Найти похожие ветки 

 
Pavlik Morozov   (2002-05-26 13:44) [0]

Hi people!

Проблема вот в чем:

У меня есть WinNT Service Application, которое при запуске регистрирует иконку в систем трее. Только вот беда: когда пользер выходит и заходит снова иконки уже нету! Также она пропадает если Експлорер вываливается и запускается снова!

Как мне определить когда надобно иконку опять регистрировать?

Сенкс!


 
Song ©   (2002-05-26 14:02) [1]

Засовывать когда её там не будет. Определить можно через FindWindow()


 
paul_shmakov ©   (2002-05-27 01:58) [2]

нужно обрабатывать сообщение, номер которого возвращает RegisterWindowMessage("TaskbarCreated"). это сообщение посылается эксплорером во время его запуска.


 
Pavlik Morozov   (2002-05-27 17:37) [3]

А небольшой пример можно ???


 
Pavlik Morozov   (2002-05-27 18:18) [4]

Вот как сделал я:


var
WM_TASKBAR_CREATED: Cardinal = WM_USER;

---------- кусок кода из описания класса -----------

FHandle: THandle;
procedure WndProc(var Message: TMessage);

---------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -----------

procedure TMainSvc.ServiceCreate(Sender: TObject);
begin
WM_TASKBAR_CREATED := RegisterWindowMessage("TaskbarCreated");
FHandle := Classes.AllocateHWnd(WndProc);
end;

procedure TMainSvc.WndProc(var Message: TMessage);
begin
try
with Message do
if (Msg=WM_TASKBAR_CREATED) and Assigned(TrayIcon)
and (WM_TASKBAR_CREATED<>WM_USER) then
begin
TrayIcon.Recreate;
end
else
Result := DefWindowProc(FHandle, Msg, wParam, lParam);
except

end;
end;

procedure TMainSvc.ServiceDestroy(Sender: TObject);
begin
Classes.DeallocateHWnd(FHandle);
end;



В результате я получаю сообщение "Invalid window handle"


 
paul_shmakov ©   (2002-05-28 01:30) [5]

хмм.. с виду код вроде бы вполне легальный. а в каком месте возникает "Invalid window handle"?


 
Pavlik Morozov   (2002-05-28 13:42) [6]

ДА вот ни в каком, наверное когда эксплорер вываливаеться окошко, созданное мноу пропадает, но это я так думаю....

Но у меня другой вопрос: действительно ли с помощью этого кода я смогу получить то, что хочу?


 
paul_shmakov ©   (2002-05-29 13:07) [7]

отлаживать надо.

а насчет сомнений по поводу поможет или нет - это единственный нормальный способ определить рестарт эксплорера.


 
Pavlik Morozov   (2002-05-30 09:06) [8]

Отлаживать-то конечно хорошо! Но хандлер-то этот вообще никогда не вызывается! Даже когда Эксплорер вываливается! Может я чего-то криво написал?


 
paul_shmakov ©   (2002-05-30 15:43) [9]


Но хандлер-то этот вообще никогда не вызывается! Даже когда Эксплорер вываливается!

это сообщение рассылается всем окнам при *старте* explorer.exe, а не при его крахе.


 
Pavlik Morozov   (2002-06-06 14:42) [10]

Но после краха он то стартует, а сообщение все-равно не вызывается! :~(



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

Текущий архив: 2002.08.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
3-35150
roadrunner
2002-07-18 16:27
2002.08.12
Excell как мастер отчетов


6-35399
adress
2002-05-30 18:47
2002.08.12
POSTDATA = ????????????????????????????????????? ЧТО ЭТО ТАКОЕ?


6-35397
ОлегМ
2002-04-10 13:18
2002.08.12
WebSnap


14-35468
Lola
2002-07-15 17:08
2002.08.12
Советую обратить внимание начинающим и не очень.


7-35478
Fredericco
2002-05-29 14:52
2002.08.12
Сообщение о выходе системы из ждущего режима