我现在要做一个工作,是这样的:
一个程序有个text,当点下此程序的text时,执行另一个程序中的函数并获得值显示在前一个程序的text中。
不知道我说的明白吗?

解决方案 »

  1.   

    进程间的通信
    用WM_COPYDATA消息好了
      

  2.   

    又是这类问题,用api查找句柄,然后发消息
      

  3.   

    因为我对程序间通讯方面只知道,一点都不会写,所以请大家给个代码,
    就以”用WM_COPYDATA消息好了 ”为例,
    谢谢了。
      

  4.   

    The WM_COPYDATA messages makes it possible to transfer information 
      between processes. It does this by passing the data through the kernel. 
      Space is allocated in the receiving process to hold the information that is copied, 
      by the kernel, from the source process to the target process. 
      The sender passes a pointer to a COPYDATASTRUCT, which is defined as a structure 
      of the following: 

    type 
      TCopyDataStruct = packed record 
        dwData: DWORD; // anwendungsspezifischer Wert 
        cbData: DWORD; // Byte-L?nge der zu übertragenden Daten 
        lpData: Pointer; // Adresse der Daten 
      end; 
    { Sender Application } 
    unit SenderApp; interface uses 
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
      StdCtrls, ExtCtrls; type 
      TForm1 = class(TForm) 
        Button1: TButton; 
        Edit1: TEdit; 
        Button2: TButton; 
        Image1: TImage; 
        procedure Button1Click(Sender: TObject); 
        procedure Button2Click(Sender: TObject); 
      private 
        procedure SendCopyData(hTargetWnd: HWND; ACopyDataStruct:TCopyDataStruct); 
      public 
      end; var 
      Form1: TForm1; implementation {$R *.DFM} // Sender: Send data 
    // Sender: Daten schicken 
    procedure TForm1.SendCopyData(hTargetWnd: HWND; ACopyDataStruct:TCopyDataStruct); 
    begin 
      if hTargetWnd <> 0 then 
        SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@ACopyDataStruct)) 
      else 
        ShowMessage('No Recipient found!'); 
    end; // Send Text from Edit1 to other app 
    // Text von Edit1 an andere Anwendung schicken 
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      MyCopyDataStruct: TCopyDataStruct; 
      hTargetWnd: HWND; 
    begin 
      // Set up a COPYDATASTRUCT structure for use with WM_COPYDATA 
      // TCopyDataStruct mit den Sende-Daten Infos ausfüllen 
      with MyCopyDataStruct do 
      begin 
        dwData := 0; // may use a value do identify content of message 
        cbData := StrLen(PChar(Edit1.Text)) + 1;  //Need to transfer terminating #0 as well 
        lpData := PChar(Edit1.Text) 
      end; 
      // Find the destination window for the WM_COPYDATA message 
      // Empf?nger Fenster anhand des Titelzeilentextes suchen 
      hTargetWnd := FindWindow(nil,PChar('Message Receiver')); 
      // send the structure to the receiver 
      // Die Struktur an den Empf?nger schicken 
      SendCopyData(hTargetWnd, MyCopyDataStruct); 
    end; // Send Image1 to other app 
    // Image1 an andere Anwendung schicken 
    procedure TForm1.Button2Click(Sender: TObject); 
    var 
      ms: TMemoryStream; 
      MyCopyDataStruct: TCopyDataStruct; 
      hTargetWnd: HWND; 
    begin 
      ms := TMemoryStream.Create; 
      try 
        image1.Picture.Bitmap.SaveToStream(ms); 
        with MyCopyDataStruct do 
        begin 
          dwData := 1; 
          cbData := ms.Size; 
          lpData := ms.Memory; 
        end; 
        // Search window by the window title 
        // Empf?nger Fenster anhand des Titelzeilentextes suchen 
        hTargetWnd := FindWindow(nil,PChar('Message Receiver')); 
        // Send the Data 
        // Daten Senden 
        SendCopyData(hTargetWnd,MyCopyDataStruct); 
      finally 
        ms.Free; 
      end; 
    end; end. {*********************************************************************} { Receiver Application } 
    unit ReceiverApp; interface uses 
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
      ExtCtrls, StdCtrls; type 
      TForm1 = class(TForm) 
        Image1: TImage; 
        Label1: TLabel; 
      private 
        procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA; 
        { Private-Deklarationen } 
      public 
        { Public-Deklarationen } 
      end; var 
      Form1: TForm1; implementation {$R *.DFM} procedure TForm1.WMCopyData(var Msg: TWMCopyData); 
    var 
      sText: array[0..99] of Char; 
      ms: TMemoryStream; 
    begin 
      case Msg.CopyDataStruct.dwData of 
        0: { Receive Text, Text empfangen} 
          begin 
            StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData); 
            label1.Caption := sText; 
          end; 
        1: { Receive Image, Bild empfangen} 
          begin 
            ms := TMemoryStream.Create; 
            try 
              with Msg.CopyDataStruct^ do 
               ms.Write(lpdata^, cbdata); 
               ms.Position := 0; 
              image1.Picture.Bitmap.LoadFromStream(ms); 
            finally 
              ms.Free; 
            end; 
          end; 
      end; 
    end; end. 
      

  5.   

    今晚看了一本旧书,上面提到一种过时的技术,仅供参考,不提倡使用,楼主有兴趣可以去看看:http://hi.baidu.com/382943850/blog/item/baf69ddc7d462da6cc11667d.html