比如有个A。B两个程序
A有个label是用来显示的 
B里有个文本框,一个按钮   点击按钮 文本框里的文字显示在B的label里
不借助本地文件和数据库我先取到A的句柄  然后遍历子窗口句柄  然后怎么改label的caption啊 setwindowtext不行
或者有什么其他控件更适合放文本内容   这些内容将来是不显示的
或者有其他方式的 只要能通信的就好先谢过了

解决方案 »

  1.   

    {用TCopyDataStruct发消息}{发送方:}
    procedure SendMsg(AppName,Msg:string);
    var
      ds: TCopyDataStruct;
    begin
      ds.cbData:=Length(Msg)+1;
      GetMem(ds.lpData,ds.cbData);
      try
      StrCopy(ds.lpData,PChar(Msg));
      SendMessage(FindWindow(nil,Pchar(AppName)), WM_COPYDATA, 0, Integer(@ds));
      finally
        FreeMem(ds.lpData,ds.cbData);
      end;
    end;{调用:}SendMsg('你的程序名称','Hello World');{接收方:}
    public
       procedure WMCopyData(var Msg: TWMCOPYDATA); message WM_COPYDATA;procedure WMCopyData(var Msg: TWMCOPYDATA);
    begin
    showmessage(StrPas(Msg.CopyDataStruct^.lpData));
    end;
      

  2.   

    思路:
    目标程序ForHandle->ProcessID以及ThreadID->ProcessHandle->Form地址->注入或者根据Form地址读RTTI->Label地址->注入或者根据Label地址,修改Caption->发送刷新消息
      

  3.   

    谢谢帅哥了,原来有这么好的方法
    能不能具体一下注释 ,有些地方还看不懂
    Length(Msg)+1这里为什么要加1
    GetMem(ds.lpData,ds.cbData);这个应该是分配内存的吧,如果是 为什么需要手动分配  还有分配内存为什么在ds.cbData:=Length(Msg)+1这个之后Integer(@ds))是把指针转成10进制吗?
    初学delphi  问题比较弱  谢谢帅哥了
      

  4.   

    一楼正解!
    去看看TCopyDataStruct定义吧。可以发送任何数据。这个结构,几个参数你可以根据自己需要拿来用。不过使用这个 不能用postmessage
      

  5.   

    一楼这个方法适合于 自己编写的
    假如别人编写的,则要dll注入了
      

  6.   

    进程间通信
    1、利用 Windows 消息通信
    2、socket
    3、管道
    4、内存映射
    随便一个都可以
    越下面越复杂,不过会了以后也没什么难度。