procedure TMainForm.CallAgent(msg: string);
var
HlAgent:HWND;
ds:TCopyDatastruct; //定义一个TCopyDatastruct结构体变量
begin
AgentMsg := msg;
ds.cbData := Length(msg)+1; //结构体的第一个元素: 长度cbData
GetMem(ds.lpData,ds.cbData); //分配内存,结构体的第二个参数: 数据的指针lpDATA
StrCopy(ds.lpData,PChar(msg)); //复制值到结构指针
HlAgent :=FindWindow('TmsgpopMainCaller','调用者'); //查找目标窗体的Handle
if HlAgent <> 0 then
begin
//ShowMessage('主' + IntToStr(Cardinal(@ds)));
SendMessage(HlAgent,WM_COPYDATA,0,Cardinal(@ds)); //发送WM_COPYDATA消息,并带上参数 @ds
end;
FreeMem(ds.lpData); //释放数据内存
end;
2.
接收方程序:
public
procedure MyMessage(var m:TWmCopyData);message WM_CopyData; //定义一个消息响应过程,并传入一个TWmCopyData的参数
...
procedure TmsgpopMainCaller.MyMessage(var m: TWmCopyData); //实现响应
var
msg:string;
begin
msg :=StrPas(m.CopyDataStruct^.lpData); //获取参数数据
ShowMessageForm := TShowMessageForm.Create(self,msg); //处理
end;