快捷搜索:   nginx

通过消息跨进程发送与接收 TCopyDataStruct 数

 
  1. 发送代码:  --------------------------------------------------------------------------------  
  2.    unit Unit1;  
  3.  interface 
  4.  uses  
  5.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,    Dialogs, StdCtrls;  
  6.  type  
  7.   TForm1 = class(TForm)      Button1: TButton;  
  8.     Edit1: TEdit;      procedure Button1Click(Sender: TObject);  
  9.   end;   
  10. var   Form1: TForm1;  
  11.  implementation  
  12.  {$R *.dfm}  
  13.  procedure TForm1.Button1Click(Sender: TObject);  
  14. var   h: HWND;  
  15.   Size: Integer;    CopyDataStruct: TCopyDataStruct;  
  16. begin    h := FindWindow(nil, '接收窗口'); { 按标题查找目标窗口 }  
  17.   if h > 0 then    begin  
  18.     Size := ByteLength(Edit1.Text) + 2;   { 多出的两个字节用于后面的 #0 }      CopyDataStruct.lpData := PChar(Edit1.Text + #0); { 要发送的字符串, #0 表示 PChar 结束}  
  19.     CopyDataStruct.dwData := WM_COPYDATA;            { 指定消息类型 }      CopyDataStruct.cbData := Size;                   { 指定要发送的数据的大小 }  
  20.     SendMessage(h, WM_COPYDATA, 0, Integer(@CopyDataStruct)); { 发送 }    end;  
  21. end;   
  22. end.  --------------------------------------------------------------------------------  
  23.  接收代码:  
  24. --------------------------------------------------------------------------------     
  25. unit Unit1;   
  26. interface  
  27. uses    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  28.   Dialogs, StdCtrls;   
  29. type    TForm1 = class(TForm)  
  30.     Memo1: TMemo;      procedure FormCreate(Sender: TObject);  
  31.   private   protected 
  32.     procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;    public 
  33.   end;   
  34. var   Form1: TForm1;  
  35.  implementation  
  36.  {$R *.dfm}  
  37.  procedure TForm1.FormCreate(Sender: TObject);  
  38. begin    Caption := '接收窗口';  
  39. end;   
  40. procedure TForm1.WMCopyData(var Message: TWMCopyData);  begin  
  41.   Memo1.Lines.Add(PChar(Message.CopyDataStruct.lpData));  end;  
  42.  end.  
  43.  
该代码已在 Delphi 2010 下测试过了.

发现 skymesh 朋友对消息操作不是太熟, 顺便告知个小技巧(其实博客中可能早提到过):
在 TForm1 = class(TForm) ... end; 中执行 Ctrl+空格;
然后输入: wm...(譬如本例输入 wmcopyd 即可) 后回车;
接着执行 Ctrl+Shift+C, 会自动完成上面大部分的消息代码.
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论