1,184
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure SendText(hwndSend:THandle;str:string);
public
{ Public declarations }
end;
const
Mesg=1600;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
fhandle:THandle;
begin
fhandle:=FindWindow(nil,'测试接收WM_COPYDATA');
if fhandle>0 then
SendText(fhandle,Edit1.text);
end;
procedure TForm1.SendText(hwndSend:THandle;str: string);
var
buf:pchar;
bufflength:integer;
databuffer:TCopyDataStruct;
begin
bufflength:=length(str)+1;
buf:=allocmem(bufflength);
Strcopy(buf,PChar(str));
try
databuffer.dwData:=Mesg;
databuffer.cbData:=bufflength;
databuffer.lpData:=buf;
SendMessage(hwndSend,WM_COPYDATA,handle,LongInt(@databuffer));
finally
freemem(buf,bufflength);
end;
end;
end.
接收端:
unit receive;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
CONST
cMsg=1600;
type
TForm1 = class(TForm)
Memo1: TMemo;
private
{ Private declarations }
procedure WMCOPYData(var Mesg:TMessage);message WM_COPYDATA;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMCOPYData(var Mesg: TMessage);
var
s:string;
begin
if PCopyDataStruct(Mesg.lParam)^.dwData=cMsg then
begin
s:=Pchar(PCopyDataStruct(mesg.lparam)^.lpData);
Memo1.Lines.add(s);
end;
end;
end.