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

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
1-35288
alex_vas
2002-07-29 13:39
2002.08.12
ListView. Проблемы - фильтрация и скорость


14-35407
KiKo
2002-07-16 11:47
2002.08.12
Время


3-35143
Lego
2002-07-18 09:19
2002.08.12
Как установить /сменить пароль на Paradox ?


1-35311
DeMoN-777
2002-07-29 09:33
2002.08.12
Разархивация


1-35327
GTA 3
2002-07-29 21:03
2002.08.12
Сохранение строки в файл, НО в опр. строку по счёту





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