Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обмен сообщениями между приложениями [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()


Наверх

Титульная страница Поиск, карта сайта Написать письмо