Главная страница
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.072 c
1-1091753019
ASoft
2004-08-06 04:43
2004.08.22
Переменная по STEPу


1-1092077414
Drow
2004-08-09 22:50
2004.08.22
Ошибка integer or String


3-1090915718
MORA
2004-07-27 12:08
2004.08.22
связанные таблицы


14-1091532155
Kerk
2004-08-03 15:22
2004.08.22
Свобода как инвестиция


14-1091655831
Knight
2004-08-05 01:43
2004.08.22
Программа "Исполнитель"...