WM_COPYDATAを使う

WM_COPYDATA を使うと簡単にプロセス間の通信ができます。ちょっとした文字列の受け渡しに使えます。

■ 送信側
procedure TForm2.Button4Click(Sender: TObject);
var
  cd  : TCopyDataStruct;
  wh  : Hwnd;
  s   : string;
  len : integer;
  Msg : PChar;
begin
  //送信先のウィンドウを探す
  wh  :=  FindWindow('TForm1', nil);
  if  wh <> 0 then  begin
    //送るメッセージ
    s   :=  'Hello';
    len :=  Length(s) + 1;
    cd.dwData :=  1;  
    cd.cbData :=  len;
    GetMem(Msg, len);
    try
      StrPCopy(Msg, s);
      cd.lpData := Msg;
      //送信先ウィンドウをアクティブにする
      SetForegroundWindow(wh);
      //送信
      SendMessage(wh, WM_COPYDATA, Application.Handle, LParam(@cd)); 
    finally
      FreeMem(Msg, len);
    end;
  end;
end;

■ 受信側
type
  TForm1 = class(TForm)
  private
    { Private 宣言 }
    procedure CopyDataMessage(var WMCopyData: TWMCopyData); message WM_COPYDATA;  
  public
    { Public 宣言 }
  end;

中略

procedure TForm1.CopyDataMessage(var WMCopyData: TWMCopyData);  
var
  s : string;
begin
  if  WMCopyData.CopyDataStruct.dwData = 1 then  begin
    s   :=  PChar(WMCopyData.CopyDataStruct.lpData);
    ShowMessage(s);
  end;
end;