我现在用postMessage(whwnd,WM_keyUP,53,0)可以发送一个字符,
但如何发送一个字符串呢?

解决方案 »

  1.   

    //用SendMessage行不, PostMessage试过不行
    var
     S:string;
    begin
      S:='Hello World';
      SendMessage(edt1.Handle, WM_SETTEXT, 0, Integer(s));
    end;
      

  2.   

    那样把S:string; 改成S:Pchar才可以吧, 你试试看行不
      

  3.   

    还是不行,我是给2000下的类似dos窗体的程序传,现在只能改变标题
      

  4.   

    你要找那接收该消息对象的Handle.
      

  5.   

    1.
    TCommInfo = array[0..50] of Char;
    szCommInfo : TCommInfo;   
    SendMessage(FormHandle, WM_COMMINFOMSG, 0, Integer(PChar(CommInfo)));
    2.
    CommInfo : String;
    SendMessage(FormHandle, WM_COMMINFOMSG, 0, Integer(PChar(CommInfo)));
      

  6.   

    var
     S:=pchar;
    begin
     S:='Hello word';
     SendMessage(Handle, WM_SETTEXT, 0, Integer(s));
    end;我向用VB写的程序的文本框成功的, 另外你接收消息对象的是什么类?
      

  7.   

    用POSTMESSAGE肯定是不行的.
    因为字符串在你的程序的内存空间,发送过去的地址是没有意义的.
    WM_SETTEXT 消息是系统特殊处理过的,会先将内容保存到一个临时的内存映射文件中.然后给目标通知的.就算是同一个程序中用POSTMESSAGE发送字符串也要保证在收到消息的时候这个字符串还在原来的位置存在才可以.
      

  8.   

    SendMessage(whwnd,WM_CHAR ,Integer(PChar(S)),0);
    这样就可以了,但只能每次传一个字符
      

  9.   

    非要用postmessage吗?
    如果可以用sendmessage,可以考虑用wm_copydata传。
      

  10.   

    SendMessage的实现在外部dll中,和调用者属于不同的exe或者dll,地址空间是独立的。
      

  11.   

    晕,WM_COPYDATA是正确答案,却估计不是楼主想要的.....楼主干嘛不把一个字符串内容一个字符一个字符发过去.
    如果字符数多,POST的时候控制一下速度.另外,建议用WM_CHAR代替WM_KEYUP
      

  12.   

    发送方:wParam = GlobalAddAtom('string...')
    PostMessage(HWnd, WM_XYZ, wParam, 0)
    接收方:str = GlobalGetAtomName(wParam)
    GlobalDeleteAtom(wParam)
      

  13.   


                sTemp := Pchar(sData);
                SendMessage(wHandle,WM_SETTEXT,0,Integer(sTemp));  这是给其它程序输入框送东东的,验证过要不用Loop发一系列按键消息也可行,关键是楼主想做啥?我觉得自已留RPC接口的话原子操作不错
      

  14.   

    哇,仔细一看,楼主是想用Windows 窗口与控制台命令行交互啊,而且没约定。
      

  15.   

    var s:string
    begin
    setlength(s,100);
    s:='1111111';
    postmessage(frm_handle,wm_user+100,integer(@s[1]),0);