怎么样使用TCopyDataStruct给其他的进程发送数据?

问答知识库用户 |浏览240次
收藏|2014/05/17 22:00
如题,怎么跨进程发送数据呢?听说WM_COPYDATA消息可以, TCopyDataStruct怎么使用?

满意回答

2014/05/17 22:00

发送代码:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  h: HWND;
  Size: Integer;
  CopyDataStruct: TCopyDataStruct;
begin
  h := FindWindow(nil, '接收窗口'); { 按标题查找目标窗口 }
  if h > 0 then
  begin
    Size := ByteLength(Edit1.Text) + 2;   { 多出的两个字节用于后面的 #0 }
    CopyDataStruct.lpData := PChar(Edit1.Text + #0); { 要发送的字符串, #0 表示 PChar 结束}
    CopyDataStruct.dwData := WM_COPYDATA;            { 指定消息类型 }
    CopyDataStruct.cbData := Size;                   { 指定要发送的数据的大小 }
    SendMessage(h, WM_COPYDATA, 0, Integer(@CopyDataStruct)); { 发送 }
  end;
end;
end.

接收代码:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
  protected
    procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
  public
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := '接收窗口';
end;
procedure TForm1.WMCopyData(var Message: TWMCopyData);
begin
  Memo1.Lines.Add(PChar(Message.CopyDataStruct.lpData));
end;
end.

热心网友

其他回答(0)
0人关注该问题
待解决问题



+1
 加载中...