在COtherThread中定义自己的消息WM_MYMESSAGE,当它响应这个消息时向全局CString中填入控件的Text,wParam可用来确认控件IDCString strText;在COtherThread中重载CWinThread::Run()
{
  while(GetMessage(pMsg))
  {
    if(pMsg->message==WM_MYMESSAGE)
        GetDlgItem(pMsg->wparam)->GetWindowText(strNewText);
  ...
  ...
  }
}

解决方案 »

  1.   

    不能用GetWindowText,这样得到的是它的标题,你可以强制转换为CEdit,然后用GetLine 来得到
      

  2.   

    我将目标设置为自身的时候都正常的(Edit也能读写),就是一旦将目标设为其他程序的时候就不行了,GetWindowText也可以获取编辑框的文本的吧!我用的是VC50,是不是兼容性的问题?如果不用MFC而用API是不是就行了(没有API的参考资料,只好用MFC)?
    而且其他的一些控件呢(ComboBox也不行)?
      

  3.   

    建议你放弃这个问题。你的目标软件使用什么编的?难道你要为每一种编程语言都设立一个接口吗?pb vb c/c++ 汇编 foxpro foxbase java....很累的。
      

  4.   

    应该用消息发送机制。
    GetItemCtrlID(...)->SendMessage(WM_GETTEXT,.....);  //记不清了。但大致形式就这样。
    以前,在下曾经使用过,或许这个周末后,即下周,在下把代码粘上来。
      

  5.   

    跨越进程边界传递字符串一般是不行的,最好用dll注入技术。可参阅《Windows高级编程指南》打开进程边界一章
      

  6.   

    我突然发现,在GetDlgItem(nID)中,我取不到CEdit之类(CComboBox等)的CWnd指针,其他都正常,到了CEdit的时候就是NULL了,访问都没法访问,怎么办?
      

  7.   

    你先取得该控件所在的窗口hwnd,然后找到CEdit/CComboBox的位置(第几个子窗口),用getChildWindow之类的函数。GetDlgItem(nID)总的nID是他本身使用的,你在外部程序不能使用。
      

  8.   

    GetDlgItem(nID)还是可以弄到Button.Static之类的空间的呀!就是Edit不行.
    我是VC的新手,所以,能不能给我一份示范代码?主要是如何通过hWnd得到CEdit...的位置不晓得,谢谢!
      

  9.   

    用api函数SendMessage
    SendMessage(hwnd,WM_GETTEXT,wParam,lParam);
    其中hwnd为Edit控件的HWND
    wParam = (WPARAM) cchTextMax;   // number of characters to copy 
    lParam = (LPARAM) lpszText;     // address of buffer for text 
      

  10.   

    现在最大的问题是:我搞不到CEdit的ID,hWnd自然也没有了!
    那些窃取密码的程序是如何做到的?