Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: 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 вся ветка

Текущий архив: 2007.03.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
11-1151260653
[e]Bu$ter
2006-06-25 22:37
2007.03.25
Ничего не получается с потоками


8-1152533499
Ильдар
2006-07-10 16:11
2007.03.25
Плей лист и время


2-1172761724
Anderson2007
2007-03-01 18:08
2007.03.25
A call to OS function failed


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


15-1172922485
Jan
2007-03-03 14:48
2007.03.25
База городов