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