Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.15;
Скачать: CL | DM;

Вниз

Сообщения (Диалог между двумя приложениями).   Найти похожие ветки 

 
andrey__   (2004-07-07 14:01) [0]

Подскажите как послать из одного приложения сообщение для другого.


 
ssk ©   (2004-07-07 14:11) [1]

это нужно?


// передача строки другому приложению
function SendDataToApplication(SourceWindow, DestinationWindow: HWND; s: string): boolean;
type
 PCopyDataStruct = ^TCopyDataStruct;
 TCopyDataStruct = record
   dwData: LongInt;
   cbData: LongInt;
   lpData: Pointer;
 end;
type
 PRecToPass = ^TRecToPass;
 TRecToPass = packed record
   s : string[255];
   i : integer;
 end;
var
 h : THandle;
 cd : TCopyDataStruct;
 rec : TRecToPass;
begin
 h:=DestinationWindow;
 rec.s := s;
 rec.i := Length(rec.s);
 cd.dwData := Length(rec.s);
 cd.cbData := sizeof(rec);
 cd.lpData := @rec;
 Result:=False;
 if h <> 0 then
   begin
     SendMessage(h, WM_COPYDATA, SourceWindow, LongInt(@cd));
     Result:=True;
   end;


// обработка данных приложением-приемником

 {
 private
   procedure WMCopyData(var m : TMessage); message WM_COPYDATA;

 ...

 procedure TForm1.WMCopyData(var m : TMessage);
 type
   PCopyDataStruct = ^TCopyDataStruct;
   TCopyDataStruct = record
     dwData: LongInt;
     cbData: LongInt;
     lpData: Pointer;
   end;
 type
   PRecToPass = ^TRecToPass;
   TRecToPass = packed record
     s : string[255];
     i : integer;
   end;
 begin
   Memo1.Lines.Add("Sending Window Handle := " + IntToStr(m.WParam));
   Memo1.Lines.Add("Data Size := " + IntToStr(PCopyDataStruct(m.LParam)^.cbData));
   Memo1.Lines.Add("User Defined Data Param := " + IntToStr(PCopyDataStruct(m.LParam)^.dwData));
   Memo1.Lines.Add("TRecToPass.s := " + PRecToPass(PCopyDataStruct(m.LParam)^.lpData)^.s);
   Memo1.Lines.Add("TRecToPass.i := " + IntToStr(PRecToPass(PCopyDataStruct(m.LParam)^.lpData)^.i));
 end;
 }
end;


 
NAlexey ©   (2004-07-07 14:12) [2]

>ssk ©   (07.07.04 14:11) [1]
Можно и так, но возможны взаимные блокировки.


 
andrey__   (2004-07-07 14:49) [3]

>ssk ©   (07.07.04 14:11) [1]

Как мне узнать в посылающем сообщение приложении DestinationWindow (Окно Адресата) для
function SendDataToApplication(SourceWindow, DestinationWindow: HWND; s: string): boolean;


 
andrey__   (2004-07-07 16:05) [4]

Удалено модератором
Примечание: Создание пустых сообщений


 
ssk ©   (2004-07-07 16:43) [5]

FindWindow()


 
andrey__   (2004-07-07 17:16) [6]

Подскажи как посылать широковещательные сообщения (между приложениями).


 
ssk ©   (2004-07-07 17:25) [7]

>широковещательные сообщения

это как? честно говоря, первый раз о таких слышу.


 
andrey__   (2004-07-07 17:53) [8]

Что я не так делаю?
  h:= FindWindow(Pchar("Application"),Pchar("MainForm"));т.к. h выдаёт =0.

>это как? честно говоря, первый раз о таких слышу.

Вычитал в книге Delphi 5 "Руководство программиста" Ксавье Паченко и Стив Тейксейра т.1 (гл. 5 разд "обмен сообщ между приложениями") Если есть. Только там не описано как их делать.


 
Digitman ©   (2004-07-07 18:05) [9]


> Что я не так делаю?
>   h:= FindWindow(Pchar("Application"),Pchar("MainForm"));т.к.
> h выдаёт =0.


h:= FindWindow(Pchar("имя_класса_формы"),Pchar("подпись_формы"));


> там не описано как их делать


SendMessage(HWND_BROADCAST, ..);

а вообще говоря интерпроцессные коммуникации с пом. оконных сообщений между "своими" приложениями - плохое решение

на то существуют программные каналы и файлы отображенные в память



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

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

Наверх




Память: 0.49 MB
Время: 0.04 c
6-1086837645
Guest
2004-06-10 07:20
2004.08.15
Проблема контроля трафика


1-1091108144
Vasya.ru
2004-07-29 17:35
2004.08.15
Процедура копирования директорий


14-1091001858
syte_ser78
2004-07-28 12:04
2004.08.15
Хинт в комобобоксе


1-1091209480
Antonmm
2004-07-30 21:44
2004.08.15
Добавление программы в реестр


11-1078839419
UnSirious
2004-03-09 16:36
2004.08.15
TabControl