Форум: "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