在实际应用中,我们经常需要多个程序相互配合来完成某些特定功能,这就需要利用数据传递来实现,利用WM_COPYDATA消息可以方便的解决这类问题。
    使用该消息涉及一个TcopyDataStruct结构类型的指针。该结构中有三个成员:
      dwData 是一个32位的附加参数
      cbData 表示要传递的数据区的大小
      lpData 表示要传递的数据区的指针
    下面举例说明。该例子由两个程序构成,分别为SendData和GetData。
    SendData程序向GetData程序发送消息,并传递edit1中的字符串;GetData在收到消息后,把SendData发送的字符串接受下来,并显示在相应的edit1中。
    SendData程序:
    ……var  Form1: TForm1;implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
      var  ds: TCopyDataStruct;  
            hd: THandle;
   begin 
       ds.cbData := Length(Edit1.Text) + 1; 
       GetMem(ds.lpData, ds.cbData); //为传递的数据区分配内存  
       StrCopy(ds.lpData, PChar(Edit1.Text));  
       Hd := FindWindow(nil, 'Form2'); // 获得接受窗口的句柄 
      if Hd <> 0 then    
           SendMessage(Hd, WM_COPYDATA, Handle,      Cardinal(@ds)) // 发送WM_COPYDATA消息  
      else    
             ShowMessage('目标窗口没找到!');  
             FreeMem(ds.lpData); //释放资源
   end;    GetData程序:
TForm2 = class(TForm) 
   Edit1: TEdit;
   private
    { Private declarations }
  public  
       procedure Mymessage(var t: TWmCopyData); message WM_COPYDATA;
      { Public declarations }
  end;
  var  Form2: TForm2;
implementationprocedure 
TForm2.Mymessage(var t: TWmCopyData);
     begin  Edit1.text := StrPas(t.CopyDataStruct.lpData); //接受数据并显示。
end;