Delphi - Interprozesskommunikation mit WM_COPYDATA
Sender:
type
TMyRecord = packed record
b: Boolean;
s: string[255];
end;
PMyRecord = ^TMyRecord;
procedure TForm1.Button1Click(Sender: TObject);
var
MyRecord: PMyRecord;
cds: TCopyDataStruct;
hWnd: THandle;
begin
GetMem(MyRecord, sizeof(TMyRecord));
try
MyRecord.b := True;
MyRecord.s := 'Hello world';
cds.dwData := 0;
cds.cbData := sizeof(TMyRecord);
cds.lpData := MyRecord;
hWnd := FindWindow(nil, 'Receiver');
SendMessage(hWnd, WM_COPYDATA, Handle, Integer(@cds));
finally
FreeMem(MyRecord, sizeof(TMyRecord));
end;
end;
Empf�nger:
type
TForm1 = class(TForm)
CheckBox1: TCheckBox;
Edit1: TEdit;
private
{ Private declarations }
public
{ Public declarations }
procedure WMCOPYDATA(var msg: TWMCopyData); message WM_COPYDATA;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TMyRecord = packed record
b: Boolean;
s: string[255];
end;
PMyRecord = ^TMyRecord;
procedure TForm1.WMCOPYDATA(var msg: TWMCopyData);
var
MyRecord: PMyRecord;
b: Boolean;
s: String[255];
begin
b := PMyRecord(msg.CopyDataStruct.lpData)^.b;
s := PMyRecord(msg.CopyDataStruct.lpData)^.s;
CheckBox1.Checked := b;
Edit1.Text := s;
end;