如何使用sendmessage 传递文本

解决方案 »

  1.   

    自定义一个消息,然后在wParam或者lParam里面传递地址
    (只能是同一个进程里面)
      

  2.   

    我是学c++的对delphi的指针不是很熟悉,该如何做呀
      

  3.   

    SendMessage(Handle, WM_MyMessage, Longint("传递文本"), 0);
    在同一个进程有效。
      

  4.   

    //无论在本进程还是多个进程之间,你都可以使用这个单元:unit CopyData_San;interface
    uses
    windows,messages,sysutils;///////////////////////
    procedure GetCopyDataParam(AMsg:TWMCopyData;var wParam:integer;var dwData:cardinal);
    function GetCopyData(AMsg:TWMCopyData):string;overload;
    procedure GetCopyData(AMsg:TWMCopyData;var P:pointer;var len:integer);overload;
    ///////////////////////////
    function SendCopyData(AHandle:Cardinal;AStr:string;wParam:integer=0;dwData:cardinal=0):integer;overload;
    function SendCopyData(AHandle:Cardinal;P:pointer;Len:integer;wParam:integer=0;dwData:cardinal=0):integer;overload;implementation
    function SetData(p:pointer;len:integer;dwData:cardinal):TCopyDataStruct;
    begin
      result.cbData:=len;
      result.lpData:=p;
      result.dwData:=dwData;
      
    end;
    function SendCopyData(AHandle:Cardinal;AStr:string;wParam:integer=0;dwData:cardinal=0):integer;overload;
    var
    len:integer;
    begin  len:=length(astr);
      if len<=0 then exit;  result:=sendcopydata(ahandle,@astr[1],len,wparam,dwdata);end;function SendCopyData(AHandle:Cardinal;P:pointer;Len:integer;wParam:integer=0;dwData:cardinal=0):integer;overload;
    var
    cs:tcopydatastruct;
    begin
      cs:=setdata(p,len,dwdata);
      result:=sendmessage(ahandle,wm_copydata,wparam,Cardinal(@cs));end;
    procedure GetCopyDataParam(AMsg:TWMCopyData;var wParam:integer;var dwData:cardinal);
    begin
      dwdata:=amsg.CopyDataStruct.dwData;
      wparam:=tmessage(amsg).WParam;end;
    procedure GetCopyData(AMsg:TWMCopyData;var P:pointer;var len:integer);
    begin
      p:=amsg.CopyDataStruct.lpData;
      len:=amsg.CopyDataStruct.cbData;
    end;
    function GetCopyData(AMsg:TWMCopyData):string;
    var
    i,len:integer;
    type
    pstr=array of char;
    begin
      result:='';
      len:=amsg.CopyDataStruct.cbData;
      if len<=0 then exit;
      setlength(result,len);
      for i:=1 to len do
      begin
        result[i]:=pstr(amsg.CopyDataStruct.lpData)[i-1];
      end;
    end;end.
      

  5.   

    使用很简单:
    发送的时候使用sendcopydata接受的时候,只要处理sm_copydata消息,并用getcopydata来处理这个twmcopydata消息。返回值就是你传递的string;不必担心string中有#0会丢失后面的数据。不会有这个问题。不但字符串可以,你还可以传递任何二进制信息。处理方法与上类似。
      

  6.   

    sorry,typing mistake.sm_copydata->wm_copydata