发送端 已经有C# winform实现,方法是这样的,现在的问题就是如何用delphi 去接受C#发送的这个消息 1.引入User32.dll的两个函数 SendMessage,和FindWindow代码如下:[DllImport("User32.dll", EntryPoint = "SendMessage")] 
        private static extern int SendMessage( 
            int hWnd,                  // handle to destination window 
            int Msg,                  // message 
            int wParam,                // first message parameter 
            ref COPYDATASTRUCT lParam  // second message parameter 
            );         [DllImport("User32.dll", EntryPoint = "FindWindow")] 
        private static extern int FindWindow( 
            string lpClassName, 
            string lpWindowName 
            ); 
2.构造消息结构 
        public struct COPYDATASTRUCT 
        { 
            public IntPtr dwData; 
            public int cbData; 
            [MarshalAs(UnmanagedType.LPStr)] 
            public string lpData; 
        } 
3.发送,其中WM_COPYDATA 的值是  const int WM_COPYDATA = 0x004A
  private void btnSend_Click(object sender, EventArgs e) 
        { 
            
            int WINDOW_HANDLER = FindWindow(null, @"第三方应用"); 
            if (WINDOW_HANDLER == 0) 
            { 
            } 
            else 
            { 
                byte[] sarr = System.Text.Encoding.Default.GetBytes(this.textBoxSend.Text); 
                int len = sarr.Length; 
                COPYDATASTRUCT cds; 
                cds.dwData = (IntPtr)1; 
                cds.lpData = this.textBoxSend.Text; 
                cds.cbData = len + 1; 
                SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds); 
            } 

解决方案 »

  1.   


    以下供你参考,我发送方也是delphi的,procedure WMCopyData(var Msg: TMessage); message WM_COPYDATA;procedure TForm1.WMCopyData(var Msg: TMessage);
    var
      str : string;
      Data  : ^tagCOPYDATASTRUCT;  
    begin
      Data:= Pointer(Msg.lParam);
      str:= StrPas(Data.lpData);  //接收一个字符串  
      ShowMessage(str);
    end;
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        procedure Button1Click(Sender: TObject);  private
        { Private declarations }
      public
        procedure MyCopyDataMsg(Var Msg : TMessage); Message WM_COPYDATA;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      cdds : TCopyDataStruct;
    begin  cdds.dwData := 0;
      cdds.cbData := length(Edit1.Text)+1;
      cdds.lpData := pchar(Edit1.Text);
      SendMessage(Handle,WM_COPYDATA,0,LongWord(@cdds));end;
    procedure TForm1.MyCopyDataMsg(var Msg: TMessage);
    var
      cdds : TcopyDataStruct;
    begin
       if msg.Msg = WM_COPYDATA then
       begin
         cdds := PcopyDataStruct(Msg.LParam)^;
         edit2.Text := (Pchar(cdds.lpData));
      end;
    end;end.
      

  3.   

    將  Edit1.text  COPY到 Edit2.text . 你應用的時候去掉
    procedure TForm1.Button1Click(Sender: TObject);
    var
      cdds : TCopyDataStruct;
    begin  cdds.dwData := 0;
      cdds.cbData := length(Edit1.Text)+1;
      cdds.lpData := pchar(Edit1.Text);
      SendMessage(Handle,WM_COPYDATA,0,LongWord(@cdds));end;    就OK