![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обмен сообщениями между приложениями [D6, WinXP]
vtur © (2007-02-01 13:56:00)Уважаемые коллеги.
Может кто-то знает, как зарегистрировать в ОС Windows некое сообщение (его идентификатор, естественно), что-то вроде
WM_GETVC = WM_APP + 13;
константа WM_APP = $8000; (файл Messages.pas)
с целью организации межпрограммного обмена сообщениями.
Как создавать обработчики сообщений я знаю.
reonid (2007-02-01 19:05:00) [1]2vtur © (01.02.07 18:18) [9]
>может кто-то знает, как передать приложению сообщение расширенной структуры
Например, используя WM_COPYDATA,
расшаренную память (CreateFileMapping/MapViewOfFile) или сокеты...
vtur (2007-02-01 18:18:00) [2]бог с ней, с регистрацией...
может кто-то знает, как передать приложению сообщение расширенной
структуры, что-то типа
SendMessage(var Msg: TMyMessage; sizeof(TMyMessage)),
а не устаревшие
PostMessage(HWND_BROADCAST;Msg: Cardinal; WParam, LParam: Longint)
SendAppMessage(Msg: Cardinal; WParam, LParam: Longint)
Игорь Шевченко (2007-02-01 18:08:00) [3]Все сообщение передаются потокам приложений, использующих один и тот же десктоп.
Сергей М. (2007-02-01 16:01:00) [4]
> tesseract © (01.02.07 15:23) [5]
>
>
> > NamedPipes,
>
>
> Некоторые на тормознутость жалуються.
Угу. Особливо - разработчики UNIX.
DiamondShark (2007-02-01 15:43:00) [5]
> А зачем тебе постояннаярегистрация ?
Телепатор подсказывает, что для того, чтобы можно было написать
procedureWMMyCoolMessage( varM: TMessage); messageWM_MYCOOLMESSAGE;
Правда, всё равно не понятно, чем при этом не угодили WM_APP + 123
> кроме того это сообщение
> не передается другим приложениям, запущенным автономно (как
> сервисы,
> например).
Все сообщения, независимо от кода сообщения, прекрасно передаются любым приложениям.
Если, разумеется, те приложения реализуют выборку сообщений и реакцию на них.
tesseract (2007-02-01 15:23:00) [6]
> NamedPipes,
Некоторые на тормознутость жалуються. Забыл ещё про IP.
Сергей М. (2007-02-01 15:14:00) [7]
> RegisterWindowMessage() не годится, т.к. эта процедура регистрирует
> сообщение в системе только на время сессии
А зачем тебе постояннаярегистрация ?
> это сообщение
> не передается другим приложениям, запущенным автономно (как
> сервисы,
> например)
Да глупости.
> Если подскажете другой способ - буду только рад
NamedPipes, FileMapping
vtur (2007-02-01 14:41:00) [8]RegisterWindowMessage() не годится, т.к. эта процедура регистрирует
сообщение в системе только на время сессии, кроме того это сообщение
не передается другим приложениям, запущенным автономно (как сервисы,
например).
Возможно я и ошибаюсь, но у меня эта технология работала только для
многопоточных приложений, т.е. когда основное приложение посылало
и получало сообщения от порожденных потоков, но многопоточность
не решала других проблем.
Я попробовал применить обмен по протоколу UDP (при помощи компонент
TIdUDPClient, TIdUDPServer, TIdAntiFreeze), но обмен по нему не всегда
стабилен (сообщение источником формируется, а в приемник не
поступает, - возможно из-за рассинхронизации).
Если подскажете другой способ - буду только рад!
Сергей М. (2007-02-01 13:59:00) [9]А почему с помощью именно механизма сообщений ?
Сергей М. (2007-02-01 13:58:00) [10]см. RegisterWindowMessage()