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;


 

2012-01-26T23:14:54 +0100, mail[at]michael[Bindestrich]puff.de