得到消息WM_GETTEXT后,可以填充参数后,用另外一个自定义消息WM_SENDTEXT把这些字符串发会到源窗口中

解决方案 »

  1.   

    如果是跟字符有关的消息,一般 lParam 参数都是一个字符缓冲区的指针
    在消息处理过程中,用 memcpy 函数把 lParam 填充就可以啦
      

  2.   

    SendMessage(someone, "who are you", wp, lp);等该函数返回后发现wp或者lp指向的字符串被填充,lp=“mary”。如何实现?
    ========================
    如果接受消息的窗口程序是你自己写的,那么你就自己处理这个自定义消息,不wp和lp只能是32位的,放指针没有什么太多用处,因为跨进程指针无效。这时可以考虑WM_COPYDATA消息
    如果接受消息的窗口不是你写的,没办法。
      

  3.   

    问楼上
    问题是,我发消息的时候,发送端没有窗口。接收端处理后回给谁呢?
    WM_GETTEXT是怎么实现的呢?
      

  4.   

    Windows可以这样做:
    SendMessage发送WM_GETTEXT后,发现WM_GETTEXT需要进程间通信,于是创建一个内存映射文件。
    对方窗体收到消息后把Text复制到内存映射文件中,返回后读取出内存映射文件的内容,复制到lParam指向的地址中,关闭内存映射文件。
      

  5.   

    发消息的时候,发送端不需要有窗口。你怎么会认为发送端必须要有窗口呢?SendMessage是要等接收消息的窗口处理完毕发送的消息才会返回,跟调用者有没有窗口根本没关系。
      

  6.   

    回楼上
    我不是说发送端必须要有窗口。我以为你的意思是接收端给发送端回复消息(通过wm_copydata)。
    事实上,我还是不知道怎么填充lp。望指教
      

  7.   

    WM_GETTEXT消息的lParam参数是一个指针,所以实现只需要把数据拷贝到这个指针指向的内存即可,最简单的实现就是:
    int size = min(wParam - 1, _tcslen(windowtext)); // 假设windowtext是本窗口保存的字符串
    memcpy((char*)lParam, (char*)windowtext, size * sizeof(TCHAR));
    ((LPTSTR)lParam)[size] = 0;
    return size;
      

  8.   


    因为跨进程指针无效。   这句话怎么理解啊,
    前段时间写了个dll,在dll中启动外部一MIS应用程序,并且在dll中给外部应用程序,发送用户名和密码,已实现自动 登陆功能啊 。
    可以实现啊,用户名和密码,技术就是一个字符串变量啊。这个怎么解释呢?
      

  9.   

    前段时间写了个dll,在dll中启动外部一MIS应用程序,并且在dll中给外部应用程序,发送用户名和密码,已实现自动 登陆功能啊 。 
    可以实现啊,用户名和密码,技术就是一个字符串变量啊。这个怎么解释呢?
    ===================================
    你用的是自定义消息吗?不是吧。