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

Вниз

поймать сообщение в сервисе   Найти похожие ветки 

 
tim ©   (2003-11-25 13:43) [0]

Есть сервис, который регистрирует сообщение в Windows с помощью RegisterWindowMessage.
Есть программа, которая изменяет некоторые данные и должна сообщить об этом сервису, соответственно она тоже регистрирует сообщение с таким же именем и посылает: SendMessage(HWND_BROADCAST,newmes,0,0);. А вот поймать в сервисе у меня не получается. Пробовал так:
procedure TsrvBackUper.DefaultHandler(var Message);
begin
if TMessage(Message).Msg =newmes then writetolog("поймал") else begin
inherited DefaultHandler(Message);
end;
end;

Если кто встречался с подобной проблемой, подскажите пожалуйста.


 
Digitman ©   (2003-11-25 14:18) [1]

сервис должен иметь св-во "Allow service to interract with desktop"

установи этот атрибут и попробуй повторить


 
Digitman ©   (2003-11-25 14:25) [2]

кр.того, сервис должен создать и иметь свое top-level-окно, чтобы получать в принипе такие сообщения

и ,кр.того, если сервису требуется передавать всего один параметр размером в DWORD, нет нужды выкрутасничать с окнами и пр. ... это легко реализуемо с пом. ф-ции ControlService() и перекрытия protected-метода TService.DoCustomControl() в твоем классе-наследнике TsrvBackUper


 
tim ©   (2003-11-25 14:59) [3]

а поподробнее пожалуйста?


 
Digitman ©   (2003-11-25 15:26) [4]

подробнее ЧТО ?


 
tim ©   (2003-11-25 15:36) [5]

да, мне надо всего один параметр.
что за функция ControlService?
как перекрыть TService.DoCustomControl()
только что прбовал - не получилось, хотя не утверждаю как правильно его перекрыть.
как послать сообщение из внешней проги и какое сообщение?
посмотрел в исходниках.DoCustomControl - это обработка сообщения CM_SERVICE_CONTROL_CODE=
WM_USER + 1 с параметром, не равным предопределенным, точнее больше 5. Это сообщение не регистрируется, а константа в модуле.


 
Digitman ©   (2003-11-25 15:43) [6]


> что за функция ControlService?


F1 не пришло в голову нажать ? прежде чем спрашивать ?


> как перекрыть TService.DoCustomControl()


точно так же как любой вирт.метод любого класса .. т.е. со спецификатором override


> DoCustomControl - это обработка сообщения CM_SERVICE_CONTROL_CODE=
> WM_USER + 1 с параметром, не равным предопределенным, точнее
> больше 5. Это сообщение не регистрируется, а константа в
> модуле.


совершенно верно.
и что тебя в этом смущает ?


 
tim ©   (2003-11-25 15:53) [7]

спасибо, хотя можно было и ответить(


 
Digitman ©   (2003-11-25 16:43) [8]


> ответить


ответить на ЧТО ? ответ на все твои вопросы тянут на приличную по времени лекцию ... я не имею такого времени



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

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

Наверх




Память: 0.48 MB
Время: 0.02 c
1-2166
dvp777
2004-01-22 11:53
2004.02.02
Как в Vis Basiс перевести now в число (секунды или милисекунды)


4-2409
Zorrow
2003-11-25 17:22
2004.02.02
регистр EIP


14-2297
}|{yk
2004-01-12 16:33
2004.02.02
Вопросы из харьковского ЧГК. №4


14-2340
Nomolos
2004-01-10 23:18
2004.02.02
Какой принтер выбрать?


4-2402
Magic lantern
2003-11-27 15:16
2004.02.02
Отключение крысы и клавы