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

Вниз

Как принять сообщение в 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1091609155
Ricko
2004-08-04 12:45
2004.08.22
SMS голосование


8-1086552818
xman
2004-06-07 00:13
2004.08.22
CANVAS


3-1091195736
Koala
2004-07-30 17:55
2004.08.22
Активные подключения


1-1091775212
student__
2004-08-06 10:53
2004.08.22
подсчет секунд


3-1091018086
Batoon
2004-07-28 16:34
2004.08.22
ascii и БД





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