Вниз
Скачать: CL | DM;

Обмен сообщениями между приложениями   Найти похожие ветки 

← →
vtur ©   (2007-02-01 13:56) [0]

Уважаемые коллеги.
Может кто-то знает, как зарегистрировать в ОС Windows некое сообщение (его идентификатор, естественно), что-то вроде

 WM_GETVC = WM_APP + 13;

константа WM_APP = $8000; (файл Messages.pas)

с целью организации межпрограммного обмена сообщениями.
Как создавать обработчики сообщений я знаю.


← →
Сергей М. ©   (2007-02-01 13:58) [1]

см. RegisterWindowMessage()


← →
Сергей М. ©   (2007-02-01 13:59) [2]

А почему с помощью именно механизма сообщений ?


← →
vtur ©   (2007-02-01 14:41) [3]

RegisterWindowMessage() не годится, т.к. эта процедура регистрирует
сообщение в системе только на время сессии, кроме того это сообщение
не передается другим приложениям, запущенным автономно (как сервисы,
например).
Возможно я и ошибаюсь, но у меня эта технология работала только для
многопоточных приложений, т.е. когда основное приложение посылало
и получало сообщения от порожденных потоков, но многопоточность
не решала других проблем.
Я попробовал применить обмен по протоколу UDP (при помощи компонент
TIdUDPClient, TIdUDPServer, TIdAntiFreeze), но обмен по нему не всегда
стабилен (сообщение источником формируется, а в приемник не
поступает, - возможно из-за рассинхронизации).
Если подскажете другой способ - буду только рад!


← →
Сергей М. ©   (2007-02-01 15:14) [4]


> RegisterWindowMessage() не годится, т.к. эта процедура регистрирует
> сообщение в системе только на время сессии


А зачем тебе постоянная регистрация ?


> это сообщение
> не передается другим приложениям, запущенным автономно (как
> сервисы,
> например)


Да глупости.


> Если подскажете другой способ - буду только рад


NamedPipes, FileMapping


← →
tesseract ©   (2007-02-01 15:23) [5]


> NamedPipes,


Некоторые на тормознутость жалуються.  Забыл ещё про IP.


← →
DiamondShark ©   (2007-02-01 15:43) [6]


> А зачем тебе постоянная регистрация ?

Телепатор подсказывает, что для того, чтобы можно было написать

procedure WMMyCoolMessage(var M: TMessage); message WM_MYCOOLMESSAGE;

Правда, всё равно не понятно, чем при этом не угодили WM_APP + 123


> кроме того это сообщение
> не передается другим приложениям, запущенным автономно (как
> сервисы,
> например).

Все сообщения, независимо от кода сообщения, прекрасно передаются любым приложениям.
Если, разумеется, те приложения реализуют выборку сообщений и реакцию на них.


← →
Сергей М. ©   (2007-02-01 16:01) [7]


> tesseract ©   (01.02.07 15:23) [5]
>
>
> > NamedPipes,
>
>
> Некоторые на тормознутость жалуються.


Угу. Особливо - разработчики UNIX.


← →
Игорь Шевченко ©   (2007-02-01 18:08) [8]

Все сообщение передаются потокам приложений, использующих один и тот же десктоп.


← →
vtur ©   (2007-02-01 18:18) [9]

бог с ней, с регистрацией...
может кто-то знает, как передать приложению сообщение расширенной
структуры, что-то типа
SendMessage(var Msg: TMyMessage; sizeof(TMyMessage)),
а не устаревшие
PostMessage(HWND_BROADCAST;Msg: Cardinal; WParam, LParam: Longint)
SendAppMessage(Msg: Cardinal; WParam, LParam: Longint)


← →
reonid ©   (2007-02-01 19:05) [10]

2vtur ©   (01.02.07 18:18) [9]
>может кто-то знает, как передать приложению сообщение расширенной структуры

Например, используя WM_COPYDATA,
расшаренную память (CreateFileMapping/MapViewOfFile) или сокеты...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.056 c
3-1167245485
крошка
2006-12-27 21:51
2007.03.25
Как правильно раздать права пользователям MS SQL и кто такой DBO?


15-1172894151
Nic
2007-03-03 06:55
2007.03.25
Уважаемая администрация


15-1172632302
Slider007
2007-02-28 06:11
2007.03.25
С днем рождения ! 28 февраля


15-1172697296
BoB-final
2007-03-01 00:14
2007.03.25
В каких случаях Windows считает оконную прог-мму зависшой?


15-1172430056
Nic
2007-02-25 22:00
2007.03.25
ЖК-монитор, WinXP, проблемы




   Наверх