1,183
社区成员




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.