BOOL EnumWindows(
  WNDENUMPROC lpEnumFunc,  // callback function
  LPARAM lParam            // application-defined value
);BOOL EnumChildWindows(
  HWND hWndParent,         // handle to parent window
  WNDENUMPROC lpEnumFunc,  // callback function
  LPARAM lParam            // application-defined value
);HWND FindWindow(
  LPCTSTR lpClassName,  // class name
  LPCTSTR lpWindowName  // window name
);
HWND FindWindowEx(
  HWND hwndParent,      // handle to parent window
  HWND hwndChildAfter,  // handle to child window
  LPCTSTR lpszClass,    // class name
  LPCTSTR lpszWindow    // window name
);int GetClassName(
  HWND hWnd,           // handle to window
  LPTSTR lpClassName,  // class name
  int nMaxCount        // size of class name buffer
);//用来判断窗口类型,是edit还是comboboxLRESULT SendMessageTimeout(
  HWND hWnd,            // handle to window
  UINT Msg,             // message
  WPARAM wParam,        // first message parameter
  LPARAM lParam,        // second message parameter
  UINT fuFlags,         // send options
  UINT uTimeout,        // time-out duration
  PDWORD_PTR lpdwResult // return value for synchronous call
);//用来发送下面两个消息WM_CLOSEWM_GETTEXT
基本上就是这些了

解决方案 »

  1.   

    我作过类似的事,总的来说用FindWindow并且结合Spy(vc调试程序)。
      

  2.   

    用FindWindow得到句柄,再利用该句柄GetWindowtext(),齐活!
      

  3.   

    每个资源都有一个句柄。
    每个文本框都有一个hwnd,找到它,再GetWindowText.
    (windows 把文本框也作为一个window)
      

  4.   

    2000下似乎不能通过WM_GETTEXT消息来获得其它进程的控件中的文本吧。
      

  5.   

    111222(www.mozilla.org) 我虽然看到了你给我的这些函数,可是我真的不知道怎么用,麻烦你可以详细的告诉我吗?谢谢mmhhj()
    可以告诉我详细的方法吗?
    谢谢
      

  6.   

    上面说的可以做到,不过这样设计是不是一定需要?通常微软系统信息类夜提供了足够的信息,而且可以通过com接口调用,不是省很多事吗?
      

  7.   

    111222
    我知道了这些函数,可是我不知道怎么用,麻烦你告诉我详细的方法好吗?谢谢~~~mmhhj() 
    可以告诉我详细方法吗?谢谢大家辛苦了
      

  8.   

    你把这个软件发给我,我帮你做
    [email protected]
      

  9.   

    做完之后,能不能发给我这个小菜鸟一份呢??各位大哥哥!!!
     Email:[email protected]
      

  10.   

    GetWindowText好象不能用。建议你看一下下面的程序:
    http://www.vckbase.com/code/downcode.asp?id=511
      

  11.   

    这个也不错
    http://www.vckbase.com/code/downcode.asp?id=526
      

  12.   

    我做过!在98下直接就可以,在2000下要用dll注入其它进程
      

  13.   

    emmai(WaTaXiWaWaTaXi)可以给我吗?多谢你了
    [email protected] 我就是要在98下用
      

  14.   

    由于原软件是采用DELPHI,或者是C++ BUILDER开发的,所以使用VC有点困难。原因是,BORLAND中的TEdit,TStoringComboBox,和MFC中的CEdit,CComboBox有点区别,再加上BORLAND中的TEdit,的类特别奇怪,有的
    TEdit中的内容可以通过GetWindowText来得到,有的确无法得到。后然经过本人分析,结果是,不能通过GetWindowText的内容,可以通过Clipboard来得到。TStoringComboBox中的内容基本和CComboBox类似。BORLAND中TEdit,TStoringComboBox中的控件ID和VC中的控件ID不同,它是程序中生成的,每次启动后是不一样的,所以不能通过普通的方法来找的该控件,只好采用枚举的方法来实现。这样,就会有个问题,就是变量与控件的值不好对应,我现以做了一部分,代码如下:(在WIN2000下测试通过)CString strEMail,strOS,strSound,strVideo,strCD,strFlop,strMem,strMB,strBios,strComp;BOOL CALLBACK EnumChildProc(  HWND hwnd,  LPARAM lParam)
    {
    CString str,str1,strComboList;
    CTestFindSysInfoAsBorlandDlg *pdlg = (CTestFindSysInfoAsBorlandDlg *)lParam; char szText[256] = "",szClassName[256]="",szLine[256] = "";
    GetWindowText(hwnd,szText,sizeof(szText)-1);
    GetClassName(hwnd,szClassName,sizeof(szClassName) -1);
    str = szClassName; if(str != "TStoringComboBox"  && str != "TEdit")
    return true;
    if(str == "TStoringComboBox")
    {
    strComboList = "";
    CComboBox *pComb = (CComboBox *)CComboBox::FromHandle(hwnd);
    if(pComb != NULL)
    {
    long n = pComb->GetCount();
    for(int i = 0;i<n;i++)
    {
    pComb->GetLBText(i,str);
    strComboList += str;
    strComboList += "\r\n";
    }
    MessageBox(NULL,strComboList ,"TStoringComboBox",MB_OK);
    }
    } if(strcmp(szClassName,"TEdit") != -1)
    {
    CEdit *pEdit = (CEdit *)CEdit::FromHandle(hwnd);
    pEdit->SetSel(0,100);
    pEdit->Copy();
    pEdit->GetWindowText(str);
    pdlg->OpenClipboard(); str1 = (char *)GetClipboardData(CF_TEXT);
    if(str == "edEMail") strEMail  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edOS") strOS  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edSound") strSound  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edVideo") strVideo  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edCD") strCD  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edFlop") strFlop  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edMem") strMem  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edMB") strMB  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edOS") strOS  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edBios") strBios  = (char *)::GetClipboardData(CF_TEXT);
    else if(str == "edComp") strComp  = (char *)::GetClipboardData(CF_TEXT);
    else
    {
    if(!str1.IsEmpty())
    MessageBox(NULL,str1,"TEdit",MB_OK);
    } if(!str.IsEmpty())
    {
    MessageBox(NULL,str1,str,MB_OK);
    }
    EmptyClipboard();
    CloseClipboard();
    }
    return true;
    }
    void CTestDlg::OnFindSysInfo() 
    {
    OpenClipboard();
    EmptyClipboard();
    CloseClipboard();
    CWnd *pWindow = FindWindow(NULL,"PC information for Windows 9x/NT/2000/Me (CRACKED)");   
    if(pWindow)
    EnumChildWindows(pWindow->GetSafeHwnd(),EnumChildProc,(long)this);
    }
    ----------------------------------------
      

  15.   

    以下程序为,得到第一页的内容,结果存放于strList中,
    --------------WIN2000下测试通过--------------------
    #define TOTAL_TEDIT_EDIT_COUNT 19      //文本框,和复合框总共有19个
    CString strList[TOTAL_TEDIT_EDIT_COUNT]; //存放结果
    long nCurrentIndex; //循环变量BOOL CALLBACK EnumChildProcFirstPageContent(  HWND hwnd,  LPARAM lParam)
    {
    CString strClassName,strResult;
    char szClassName[256]="",szLine[256] = "";
    GetClassName(hwnd,szClassName,sizeof(szClassName) -1);
    strClassName = szClassName;
    //由于第一页只有文本框,和复合框,只需要TEdit,Edit就可以了
    if(strClassName == "TEdit" || strClassName == "Edit")
    {
    //把它转化为VC++下面的CEdit的类型指针
    CEdit *pEdit = (CEdit *)CEdit::FromHandle(hwnd);
    pEdit->SetSel(0,255);   //最多选者的内容,其中255可以修改成别的数
    pEdit->Copy();          //把内容拷贝到剪贴板中    OpenClipboard(NULL);     //打开剪贴板
    strResult = (char *)GetClipboardData(CF_TEXT);   //获取内容
    strList[--nCurrentIndex] = strResult;         //结果存入数组中 EmptyClipboard();       //清空剪贴板
    CloseClipboard();        //关闭剪贴板
    } return true;
    }
    void CTestFindSysInfoAsBorlandDlg::OnFindSysInfo() 
    {
    nCurrentIndex  = TOTAL_TEDIT_EDIT_COUNT;

    //为了清空程序运行之前,剪贴板的内容
    OpenClipboard();
    EmptyClipboard();
    CloseClipboard(); //找到该窗口
    CWnd *pWindow = FindWindow(NULL,"PC information for Windows 9x/NT/2000/Me (CRACKED)");    if(pWindow) //枚举子窗口
    {
    EnumChildWindows(pWindow->GetSafeHwnd(),EnumChildProcFirstPageContent,(long)this); //需要的结果已经在strList中,
    //显示结果
    for(int i=0;i<17;i++)
    {
    ::MessageBox(NULL,strList[i],"信息",MB_OK);
    }
    }else
    ::MessageBox(NULL,"该软件未运行","信息",MB_OK); }