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

Вниз

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

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

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

Наверх





Память: 0.46 MB
Время: 0.01 c
14-2335
Vint
2004-01-13 13:33
2004.02.02
Всех с наступающим Старым-Новым годом!


9-1944
r0n1n
2003-07-17 01:50
2004.02.02
Массив типов


1-2112
Goida
2004-01-19 17:30
2004.02.02
Проблемы в работе с Word с помощью Delphi


14-2272
BKGG
2004-01-13 12:11
2004.02.02
Скажите пожалусто, от кудо можно скачать дизассемблер.


14-2285
Леприкон
2004-01-13 08:28
2004.02.02
WinRAR вырезал ошибочную часть AVI...





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