FindWindow()获得那个editbox的hwnd,再PostMessage(hwnd, WM_GETTEXT,...);PostMessage(hwnd, WM_SETTEXT,...);

解决方案 »

  1.   

    呵呵,如果桌面上那个程序不是你自己写的,就未必有IDISPATCH接口,就不能用自动化了。
      

  2.   

    不会吧,一定要有idispatch才可以的啊。如果不能自动化呢?还有其他的方法吗?
      

  3.   

    zcpro(zcpro)的方法是可以的
    但PostMessage(hwnd, WM_GETTEXT,...);是不是该改成SendMessage(hwnd, WM_GETTEXT,...);否则字符串还没取就返回了
      

  4.   

    可是我这个程序里的edit box没有标题,怎么办呢,我只知道用spy++看出来这个edit box的class是ledit,不知道该如何下手了。
      

  5.   

    那么你再用Spy++看看,看他的父窗口有没有特殊的地方,如果还没有,就再往上找。找的时候最好将他们的逻辑关系搞清楚,例如,他的父窗口有几个EDIT控件,它自己是第几个等等,或者,它的上一个、下一个Sibling控件有没有什么特殊之处……
    程序里用FindWindow/GetWindow/EnumWindows/EnumChildWindows倒着把它找回来。
    最后,取文本一定要用SendMessage,绝对不能用PostMessage。
      

  6.   

    富窗口的Class是"Afx:b:10011:6:490683",不知道是什么东东,还有这个程序里只有一个edit box,你能不能说得详细一点,谢谢。
      

  7.   

    楼上的能不能说得详细点,getmessage()不是取消息队列里的消息的吗?
      

  8.   

    TCHAR szBuffer[256];
    HWND hParent = FindWindow(TEXT("Afx:b:10011:6:490683"), NULL);
    HWND hEdit = FindWindowEx(hParent, NULL, TEXT("EDIT"), NULL);
    SendMessage(hEdit, WM_GETTEXT, 256, (LPARAM)szBuffer);
      

  9.   

    楼上的高手,我试了你的程序,可以找到那个edit box了,但是为什么读不进数据,还有,我把FindWindow(),FindWindowEx(),和SendMessage()都加了::,否则好像不能正常编译,不知道对不对。
      

  10.   

    是不是因为楼上说的没有定义automation啊。
      

  11.   

    TCHAR szBuffer[256];
    HWND hParent = FindWindow(TEXT("Afx:b:10011:6:490683"), NULL);
    HWND hEdit = FindWindowEx(hParent, NULL, TEXT("EDIT"), NULL);//SendMessage(hEdit, WM_GETTEXT, 256, (LPARAM)szBuffer);
    GetWindowText(hEdit, szBuffer, sizeof(szBuffer) - 1);try again!
      

  12.   

    进行控件遍历
    EnumChildWindows(g_hwnd,EnumChildProc,0);//g_hwnd为父窗口
    BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 
    {
        BOOL bGet;
        char szBuf[256];    GetClassName(hwndChild, szBuf, 256);
        if(!strcmp(temp,_T("Edit")))// Edit输入框
    bGet=1;
        if(bGet)
              SendMessage(hwndChild,WM_GETTEXT,256,(LPARAM)szBuf);
    }
    填充的方法是差不多的
      

  13.   

    不行,还是只能取到caption,要么这个窗口不是edit control,msdn里面说other window只能取到window title。
      

  14.   

    可以找到这个窗口,spy++里面显示的是ledit,但是好像不是eidt框
    VC中可以用来显示和改写的有哪几种控件啊。
      

  15.   

    我找到了这个窗口控件的handle,但是取出来的只是window title,好像wm_gettext只能取edit control的内容,而其他的window,只能取到title。
      

  16.   

    思路就是azuo_lee所说的。
    你再具体使用一下
    HWND hEdit = FindWindowEx(hParent, NULL, TEXT("EDIT"), NULL);
    找到确切的edit。
    azuo_lee的方法应该是正确的啊。
      

  17.   

    我的意思是这个窗口,也许不是edit control,所以WM_GETTEXT只能返回window title(MSDN里说的)。
      

  18.   

    你可以针对不同的控件类型采用不同的处理方法:
    比如ComboBox
    SendMessage( 
      (HWND) hWnd,              // handle to destination window 
      CB_GETLBTEXT,             // message to send
      (WPARAM) wParam,          // item index
      (LPARAM) lParam          // receives string (LPCSTR)
    );就可以得到值了
      

  19.   

    我看msdn上的介绍,好像只有edit control,combo box,rich edit box这些可以取到值。不过我总觉得那个窗口很象记事本的里的那个窗口。不知道为什么。