Форум: "Основная";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
ВнизОбмен сообщениями между приложениями Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.048 c