我写了两个exe程序,同时运行,需要把 1.exe中的 edit1.text,传递到 2.exe中的 edit2.text中显示,请问要怎么处理才能达到效果呢?

解决方案 »

  1.   

    如果只是传递 字符串内容 ,貌似 SendMessage WM_COPYDATA 最简单方便
      

  2.   

    除了楼上说的,
    还可以findwindow找到edit1的text,edit2直接取来用
      

  3.   

    额,同问,SendMessage好像不可以,可以说具体点吗?我来试试
      

  4.   


    这是进程通讯的问题,方法非常非常多,在 windows 下比较正规的有:
    通讯类
    1. TCP/UDP
    2. corba
    3. soap (即 WebService)microsoft 平台下专用
    1. COM/DCOM
    2. DDE unix 或者我们学习操作系统时经典
    1. share memory
    2. pipe(管道)
      

  5.   

    去网站找一本windows核心编程,第17章专门讲内存映射文件。
    sendmessage的wm_copydata方式,直接到msdn上搜索一下即可。
      

  6.   

    WM_CopyData最简单的方法
    内存映射
    管道
    Socket等等!
      

  7.   

    WM_CopyData
    如果别人的程序 那就要钩子了
      

  8.   

    project1.exe
    unit Unit1;interfaceuses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;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, PAnsiChar(AnsiString(Edit1.Text)));
      hd := FindWindow(nil, 'Form2'); // 获得接受窗口的句柄
      if hd <> 0 then
        SendMessage(hd, WM_COPYDATA, Handle, Cardinal(@ds))  //Cardinal(@ds)) // 发送WM_COPYDATA消息
      else
        ShowMessage('目标窗口没找到! ');
      FreeMem(ds.lpData); // 释放资源
    end;end.project2.exe
    unit Unit2;interfaceuses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type
      TForm2 = class(TForm)
        Edit2: TEdit;
      private
        { Private declarations }
      public
        procedure Mymessage(var t: TWmCopyData); message WM_COPYDATA; { Public   declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Mymessage(var t: TWmCopyData);
    begin
      Edit2.text := string(StrPas(PAnsiChar(t.CopyDataStruct.lpData))); // 接受数据并显示。
    end;end.
      

  9.   

    Delphi XE2 都是 String 都是widestring
    winapi 好象还是 AnsiString
    哎.....
      

  10.   

    这个忘了。。
    ds.cbData := Length(AnsiString(Edit1.Text)) + 1;