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

Вниз

Как принять сообщение в TServiceApplication посланное другим прил   Найти похожие ветки 

 
andrey__   (2004-07-08 14:51) [0]

Application.OnMessage := OnAppMessage; такого события нет
 Application.HookMainWindow(AppWindowHook); тоже не подходит


 
Digitman ©   (2004-07-08 15:08) [1]

а нашута сервису общаться с другим приложением именно посредством механизма вин-сообщений ? программные каналы и файлы отображенные в память уже упразднили ?


 
andrey__   (2004-07-08 15:30) [2]

>Digitman ©   (08.07.04 15:08) [1]
Мне нужно что бы приложение сервис знало о факте нажатия кнопки на другом приложении (я для этого думал использовать механизм сообщений)
Я никогда не работал с программными каналами и файлами отображенными в память и для того чтобы сейчас принять твой вариант мне нужно понять:  Я должен буду в какомто цыкле постоянно опрашивать этот файл (канал) или там есть механизм событий.


 
andrey__   (2004-07-08 16:20) [3]

>Digitman ©   (08.07.04 15:08) [1]
Я искал чот такое программные каналы и не нашёл. Нашёл только именованные каналы это однои то же?


 
andrey__   (2004-07-08 16:23) [4]

>Digitman ©   (08.07.04 15:08) [1]
Я искал чот такое программные каналы и не нашёл. Нашёл только именованные каналы это однои то же?


 
Игорь Шевченко ©   (2004-07-08 16:35) [5]

andrey__   (08.07.04 16:23)

http://www.delphimaster.ru/articles/named_pipes/index.html

Точно также можно и с сервисом взаиможействие организовать.

Кроме того, пример взаимодействия с сервисом приводится в книжке Рихтера и Кларка "Программирование серверных приложений для Windows 2000" и в Platform SDK


 
Digitman ©   (2004-07-08 16:35) [6]


> Мне нужно что бы приложение сервис знало о факте нажатия
> кнопки на другом приложении (я для этого думал использовать
> механизм сообщений)
> Я никогда не работал с программными каналами и файлами отображенными
> в память и для того чтобы сейчас принять твой вариант мне
> нужно понять:  Я должен буду в какомто цыкле постоянно опрашивать
> этот файл (канал) или там есть механизм событий.


ну когда-то ж нужно начинать работать с MMF ..

в принципе, для данной задачи механизм сообщений не так уж и противопоказан, но нужно понимать, что сообщение должно иметь адресата

если адресатом будет являться окно, то сервис должен создать это окно и взаимодействовать с рабочим столом, в контексте которого работает приложение-источник сообщения; последнее же должно каким-либо образом получить хэндл этого окна

если адресатом будет являться не окно, а трэд сервиса, то и в этом случае приложение-источник должно каким-то образом узнать об Id этого трэда

для первого и второго случая универсальным и простейшим решением является создание сервисом посредством механизма MMF глоб.области памяти, куда сервис при старте запишет инф-цию об адресе назначения ожидаемых сервисом в дальнейшем сообщений - это м.б. и хэндл созданного сервисом окна и Id трэда сервиса

приложение-источник при старте получает доступ к глоб.области памяти, считывает оттуда адрес назначения и в случае если это хэндл окна имеет возможность посылать в это окно сообщения вызовами Send/Postmessage, а если это Id трэда - PostThreadMessage

ожидание/прием/обработка сервисом сообщений того или иного рода - отдельная песня, но и она не так уж сложна - все зависит от того, в каком трэде создается окно и создается ли оно сервисом вообще

здесь нужно просто определиться ...


> Нашёл только именованные каналы это однои то же?


да, одно и то же


 
andrey__   (2004-07-13 17:29) [7]

Для любопытства: Сообщение может принимать только приложение имеющее оконный ресурс?


 
Digitman ©   (2004-07-13 18:11) [8]


> andrey__


> Сообщение может принимать только приложение имеющее оконный
> ресурс?


неверно.
уж начиная с термина "принимать" неверно.

сообщение м.б. адресовано кодовому потоку, алгоритм которого и не думал создавать какие-либо окна

в Вин32 вкратце вся эта концептуальная ботва выглядит так :

- любой кодовый поток вправе и может адресовать некое сообщение как произвольному кодовому потоку, так и окнам, которые этот кодовый поток потенциально создал

- адресация сообщения кодовому потоку выглядит с т.з. Вин32 как вызов ф-ции PostThreadMessage(), возвращающей Истину, если очередь сообщений целевому потоку на момент вызова ф-ции действительно существует и сообщение поставлено в хвост этой существующей очереди

- адресация сообщения окну, созданному неким кодовым потоком выглядит с т.з. Вин32 как вызов ф-ций из ряда PostMessage()/Sendmessage() и иже с ними; если код.поток не создал окно-адресат, т о и адресата НЕ существует

цикл ожидания/проверки/выборки/диспетчеризации Вин32-сообщений м.б. универсален для ЛЮБОГО кодового потока; поле хэндла окна в структуре выбранного сообщения известит об адресате : =0 - сообщение послано кодовому потоку, <> 0 - сообщение послано некоему окну, созданного в ходе исполнения алгоритмом код.потока вызова CreateWindow[Ex]



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
1-1091714524
}{uMuK
2004-08-05 18:02
2004.08.22
А есть ли label c вертикальным направлением текста?


4-1089498500
naum
2004-07-11 02:28
2004.08.22
Температура CPU


1-1091526089
BoxTer
2004-08-03 13:41
2004.08.22
Копирование данных через буфер из Excel в DBGrid...


4-1088894848
Spy.RU
2004-07-04 02:47
2004.08.22
Доступ к строке инициализации модема


14-1091392264
Evgenius
2004-08-02 00:31
2004.08.22
Самарские программеры откликнитесь plz