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