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; |