用一个工具捕获两个版本火狐浏览器中输入的网址
Name: "地址"
Value: "http://zh-cn.www.mozilla.com/zh-CN/firefox/3.0.5/whatsnew/"
Role: 可编辑文字
State: 已设定焦点,可设定焦点,有弹出菜单Name: "搜索书签和历史"
Value: "http://www.mozilla.com/zh-CN/firefox/3.6.12/whatsnew/"
Role: 可编辑文字
State: 可设定焦点,有弹出菜单
Location: {l:317, t:59, w:372, h:14}主要VB代码如下:
'''''''''''''''''''''''''''''''''''
Option ExplicitPrivate Sub Command1_Click()
    Text1.Text = GetFirefoxURL("3.0.5")
End SubPrivate Sub Command2_Click()
  Text1.Text = GetFirefoxURL("3.6.12")
End SubPrivate Sub Form_Load()
     Text1.Text = GetFirefoxURL("3.0.5")
End Sub
'''''''''''''''''''''''''''''''''''Option Explicit
Public Declare Function FindWindow Lib "user32" 
Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function FindWindowEx Lib "user32.dll" 
Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long,
 ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPrivate Declare Function AccessibleObjectFromWindow Lib "oleacc" 
(ByVal hwnd As Long, ByVal dwId As Long, riid As Type_GUID,
 ppvObject As Object) As LongPrivate Declare Function AccessibleChildren Lib "oleacc" 
(ByVal paccContainer As IAccessible, ByVal iChildStart As Long, 
ByVal cChildren As Long, rgvarChildren As Variant, pcObtained As Long) As LongPrivate Const CHILDID_SELF As Long = &H0&
Private Const OBJID_CLIENT As Long = &HFFFFFFFC
Private Type Type_GUID
    Data1            As Long
    Data2            As Integer
    Data3            As Integer
    Data4(0 To 7)    As Byte
End Type'*************************************************************************
'**函 数 名:GetFirefoxURL
'**输    入:sVersion(String) -火狐的版本,目前我只试过“3.0.5”。
'**输    出:(String) -网址
'*************************************************************************
Public Function GetFirefoxURL(sVersion As String) As String
    Dim hFirefoxWnd  As Long  '浏览器窗体句柄
    Dim hClildWnd    As Long  '输网址的编辑框的句柄
    
    Dim udtIA        As IAccessible
    Dim udtNewIA     As IAccessible
    Dim tmpLoad      As IAccessible
    
    Dim tg           As Type_GUID
    Dim lRet         As Long
    Dim lStart       As Long
    Dim udtChildIA() As Variant
    Dim lCount       As Long
    Dim lNewCount    As Long
    Dim i            As Long    '获取浏览器窗体句柄
    hFirefoxWnd = FindWindow("MozillaUIWindowClass", vbNullString)
    If hFirefoxWnd = 0 Then
        MsgBox "没有打开火狐!", vbCritical, "警告"
        Exit Function
    End If
    
    '获取输网址的编辑框的句柄
    hClildWnd = FindWindowEx(hFirefoxWnd, 0, "MozillaWindowClass", vbNullString)
    'Debug.Print Hex$(hClildWnd)
    
    '以下部分代码参考了《Advanced Microsoft Visual Basic 6.0 Second Edition》
    '第16章Microsoft Active Accessibility部分
    '定义IAccessible对象的GUID{618736E0-3C3D-11CF-810C-00AA00389B71}
    With tg
        .Data1 = &H618736E0
        .Data2 = &H3C3D
        .Data3 = &H11CF
        .Data4(0) = &H81
        .Data4(1) = &HC
        .Data4(2) = &H0
        .Data4(3) = &HAA
        .Data4(4) = &H0
        .Data4(5) = &H38
        .Data4(6) = &H9B
        .Data4(7) = &H71
    End With
    lRet = AccessibleObjectFromWindow(hFirefoxWnd, OBJID_CLIENT, tg, udtIA)    lCount = udtIA.accChildCount
    Debug.Print lCount
    ReDim udtChildIA(lCount - 1) As Variant
    lRet = AccessibleChildren(udtIA, lStart, lCount - 1, udtChildIA(0), lNewCount)
    
    For i = 0 To lNewCount - 1
        If IsObject(udtChildIA(i)) = True Then
            Set tmpLoad = udtChildIA(i)
            
            'If tmpLoad.accName(CHILDID_SELF) = "搜索书签和历史" Then
            'GetFirefoxURL = tmpLoad.accValue(CHILDID_SELF)
            
            If tmpLoad.accChildCount = 8 Then
                Set udtNewIA = tmpLoad
                lCount = tmpLoad.accChildCount
                Exit For
            End If
        End If
    Next i    ReDim udtChildIA(lCount - 1) As Variant
    lRet = AccessibleChildren(udtNewIA, lStart, lCount, udtChildIA(0), lNewCount)
    For i = 0 To lNewCount - 1
        If IsObject(udtChildIA(i)) = True Then
            Set tmpLoad = udtChildIA(i)
            
            '处理3.0.5版浏览器
            If tmpLoad.accName(CHILDID_SELF) = "地址" Then
            
            '处理3.6.12版浏览器
             'If tmpLoad.accName(CHILDID_SELF) = "搜索书签和历史" Then
                Set udtNewIA = tmpLoad
                lCount = tmpLoad.accChildCount
                GetFirefoxURL = tmpLoad.accValue(CHILDID_SELF)
                Exit For
            End If
        End If
    Next i    '处理3.0.5版浏览器(这个版本可以捕获到输入的URL)
    If sVersion = "3.0.5" Then
        ReDim udtChildIA(lCount - 1) As Variant
        lRet = AccessibleChildren(udtNewIA, lStart, lCount, udtChildIA(0), lNewCount)
        For i = 0 To lNewCount - 1
            If IsObject(udtChildIA(i)) = True Then
                Set tmpLoad = udtChildIA(i)
                If tmpLoad.accName(CHILDID_SELF) = "地址" Then
                    GetFirefoxURL = tmpLoad.accValue(CHILDID_SELF)
                    Exit For
                End If
            End If
        Next i
    End If
    
        '处理3.6.12版浏览器(无法获取到输入的URL!!!)
        If sVersion = "3.6.12" Then
        ReDim udtChildIA(lCount - 1) As Variant
        lRet = AccessibleChildren(udtNewIA, lStart, lCount, udtChildIA(0), lNewCount)
        For i = 0 To lNewCount - 1
            If IsObject(udtChildIA(i)) = True Then
                Set tmpLoad = udtChildIA(i)
                If tmpLoad.accName(CHILDID_SELF) = "搜索书签和历史" Then
                    GetFirefoxURL = tmpLoad.accValue(CHILDID_SELF)
                    Exit For
                End If
            End If
        Next i
       End IfEnd Function
'''''''''''''''''''''''''''''''''''

解决方案 »

  1.   

        For i = 0 To lNewCount - 1
            If IsObject(udtChildIA(i)) = True Then
                Set tmpLoad = udtChildIA(i)
                
                'If tmpLoad.accName(CHILDID_SELF) = "搜索书签和历史" Then
                'GetFirefoxURL = tmpLoad.accValue(CHILDID_SELF)
                
                '用3.6.12版火狐浏览器测试时
                'tmpLoad.accChildCount一直为0 
                If tmpLoad.accChildCount = 8 Then
                    Set udtNewIA = tmpLoad
                    lCount = tmpLoad.accChildCount
                    Exit For
                End If
            End If
        Next i    ReDim udtChildIA(lCount - 1) As Variant    '用3.6.12版火狐浏览器测试时
        'AccessibleChildren返回值为失败
        lRet = AccessibleChildren(udtNewIA, lStart, lCount, udtChildIA(0), lNewCount)请大家帮忙看下,什么原因,谢谢
      

  2.   

    怎样获取firefox正在访问的URL?
    http://topic.csdn.net/u/20091115/17/57fc553e-a44e-423f-934f-9fde209a161b.html  3.3 Gecko内核浏览器网页内容获取与分析(基于MSAA技术)  
      Gecko是目前除IE外另一个比较强大的浏览器内核,基于它的Firefox目前也是十分的流行,其对MSAA也提供了支持,通过查阅Mozilla开发手册,我们得知其提供了ISimpleDOMNode、 ISimpleDOMText、、 ISimpleDOMDocument三个接口,其中的ISimpleDOMDocument类似于IE的IHTMLDOCUMENT2。  
      为了调用以上三个接口,我们先从Mozilla Developer Center下载三个文件ISimpleDOMNode.idl、ISimpleDOMText.idl 、ISimpleDOMDocument.idl。这里解释一下IDL的概念: IDL(Interface Definition Language)即接口定义语言,它提供一套通用的数据类型,并以这些数据类型来定义更为复杂的数据类型。可变化 IDL 基本类型 整数类型 OMG IDL 摒弃int 类型在不同平台上取值范围不同带来的多义性的问题。常数定义常数可以是整数、字符、浮点数、字符串、Boolean、octet 或枚举型,不能是 any 类型或用户定义的类型。OMG IDL数组类型IDL array 和 sequence,可以轻易地被映射到实现语言中。序列可以包含所有类型的元素,不管是基本类型还是用户定义的类型。  
      我们使用微软的IDL编译器即MIDL来生成windows平台下的头文件,命令格式如下:  
      MIDLISimpleDOMNode.idl  
      MIDLISimpleDOMText.idl  
      MIDLISimpleDOMDocument.idl  
      然后我们就得到了三个头文件ISimpleDOMNode.h、ISimpleDOMText.h、ISimpleDOMDocument.h可供我们使用,接着我们使用Spy++结构对Firefox的窗体结构进行分析,得知Firefox的顶级窗口类型为" MozillaUIWindowClass ",网页容器窗口类型为” MozillaContentWindowClass ”,实现网页获取的关键就是获取ISimpleDOMNode和ISimpleDOMDocument指针。  
      下面以最新发布的Firefox3.0为例实现网页获取,大致流程与3.2相同,只需修改连个窗体函数  
      // 首先定义两个接口的IID值  
      const IID IID_ISimpleDOMNode = {0x1814ceeb,0x49e2,0x407f,{0xaf,0x99,0xfa,0x75,0x5a,0x7d,0x26,0x07}};  
      const IID IID_ISimpleDOMDocument = {0x0D68D6D0,0xD93D,0x4d08,{0xA3,0x0D,0xF0,0x0D,0xD1,0xF4,0x5B,0x24}};  
      // 窗体过程函数  
      BOOLCALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam) {  
      char buf[100];  
      GetClassName(hwnd,(LPTSTR)&buf,100); // 获得窗体类型
     if ( strcmp(buf,(" MozillaUIWindowClass "))==0 ) { // 如果为Firefox的窗体类型则枚举子窗口  
      EnumChildWindows(hwnd,EnumChildProc,NULL); }  
      return true;  
      }  
      // 子窗体过程函数  
      BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam) {  
      char buf[100];  
      GetClassName(hWnd,(LPTSTR)&buf,100);  
      BSTR urlbuf;  
      if (strcmp(buf,_T("MozillaContentWindowClass"))==0) {  
      ISimpleDOMDocument* spDoc=GetGeckoDocInterface(hWnd);  
      if (spDoc){// 成功获得ISimpleDOMDocument指针  
      spDoc->get_URL(&urlbuf); //获得url地址  
      char* sp=_com_util::ConvertBSTRToString(urlbuf);}  
      return true;} }  
      // 核心函数,用于取得IHTMLDOCUMENT2接口  
      ISimpleDOMDocument* GetGeckoDocInterface(HWND hWnd) {  
      IAccessible* spAccessible=NULL;  
      ISimpleDOMNode* spDOMNode=NULL;  
      ISimpleDOMDocument* spDoc=NULL;  
      HRESULT hResult;  
      if (S_OK==AccessibleObjectFromWindow(hWnd,  
       OBJID_CLIENT, // 注意,由于Firefox窗口结构的特殊性  
       // 这里只能使用OBJID_CLIENT  
       IID_IAccessible,  
       (void**)&spAccessible))  
      { hResult=spAccessible->QueryInterface(IID_ISimpleDOMNode,(void**)&spDOMNode);  
      if (SUCCEEDED(hResult)) {  
       hResult=spDOMNode->QueryInterface(IID_ISimpleDOMDocument,(void**)&spDoc);  
       if (SUCCEEDED(hResult)) {  
       return spDoc;} } }  
       return NULL; }  
      这里的头文件除了3.3中的外还有刚才生成的ISimpleDOMDocument.h和ISimpleDOMNode.h  
      ISimpleDOMNode接口中提供了诸如get_parentNode()、get_firstChild()、get_nextSibling()等方法,可以用来对文档结构进行树状解析。 
    -----------------------------------
    use oleacc;//http://files.codes-sources.com/fichier.aspx?id=28611&f=oleacc.pas
    function ffdoc: THandle;
    const
      A_szClassName:array[0..6] of PChar=('MozillaUIWindowClass','MozillaWindowClass',
      'MozillaWindowClass','MozillaWindowClass','MozillaContentWindowClass',
      'MozillaWindowClass','MozillaWindowClass'
      );
    var
      i:Integer;
    begin
      Result:=0;
      for i:=0 to 6 do Result:=FindWindowEx(Result,THandle(nil),A_szClassName[i],nil);
    end;
    function ffurl:string;
    var
      acc:IAccessible;
      pw:PWChar;
    begin
      if AccessibleObjectFromWindow(ffdoc,OBJID_CLIENT,IID_IAccessible,Pointer(acc))=0 then
      Acc.get_accValue(CHILDID_SELF,pw);
      Result:=pw;
    end;initialization
      OleInitialize(nil);
    finalization
      OleUninitialize;
      

  3.   

      MIDLISimpleDOMNode.idl  
      MIDLISimpleDOMText.idl  
      MIDLISimpleDOMDocument.idl  
      然后我们就得到了三个头文件ISimpleDOMNode.h、ISimpleDOMText.h、ISimpleDOMDocument.h可供我们使用
    -----------------
    这几个文件支持最新的火狐浏览器 3.6.13 ?
      

  4.   

    ●参考的资料链接如下●
    (1)怎样获取firefox正在访问的URL?
    http://topic.csdn.net/u/20091115/17/57fc553e-a44e-423f-934f-9fde209a161b.html(2)Active Accessibility接口,无法获取火狐浏览器输网址控件的Name值
    http://topic.csdn.net/u/20101210/16/c1e355d0-0544-464c-8dd2-3c2d5ec80be9.html(3)MSAA无法获取火狐浏览器IHTMLDocument2*接口
    http://topic.csdn.net/u/20101217/01/c4dc0d70-38b0-428d-92b5-32e1329c6185.html?67920(4)Active Accessibility接口,无法获取火狐浏览器输网址控件的Name值
    http://topic.csdn.net/u/20101210/16/c1e355d0-0544-464c-8dd2-3c2d5ec80be9.html(5)AccessibleObjectFromWindow函数介绍
    http://msdn.microsoft.com/en-us/library/dd317978(v=vs.85).aspx(6)IAccessible::get_accName函数介绍
    http://msdn.microsoft.com/en-us/library/ms696177(7)MS Active Accessibility 接口技术编程尝试
    http://www.vckbase.com/document/viewdoc/?id=883(8)IAccessible ( 二 )
    http://www.cnblogs.com/GnagWang/archive/2010/04/20/1716449.html(9)如何获取网页密码框中的密码
    http://www.vckbase.com/document/viewdoc/?id=288(10)取得火狐地址栏网址!(Active Accessibility的应用 VB代码)
    http://hi.baidu.com/hidetray/blog/item/f60a58a695055c92d1435809.html(11)MSAASDK13-开发包(内附Demo程序)   
    http://cfans_2011.download.csdn.net/(12)做成Firefox的插件,参考XPCOM
    https://developer.mozilla.org/en/How_to_build_a_binary_XPCOM_component_using_Visual_Studio(13)XPCOM 简介
     https://developer.mozilla.org/index.php?title=cn/%E5%88%9B%E5%BB%BA_XPCOM_%E7%BB%84%E4%BB%B6/XPCOM_%E7%AE%80%E4%BB%8B(14)Index of /pub/mozilla.org/mozilla/releases
     http://ftp.mozilla.org/pub/mozilla.org/mozilla/releases/(15)"XPCOM"
    https://developer.mozilla.org/Special:Tags?tag=XPCOM&language=zh-cn(16)获取网页密码-VC6代码
    http://download.csdn.net/source/2916152(17)MSSA辅助工具,可以获取火狐浏览器输入的网址,
    是MSAA开发包中DEMO程序编译后得到的。
    http://download.csdn.net/source/2916151(18)MSAASDK13-浏览器探测工具  
    http://cfans_2011.download.csdn.net/
      

  5.   

    重新看了下MSAA开发包中的DEMO程序,
    主要看的是inspect.cpp这个文件,好象主要用了下面几个接口函数。//获取pAcc接口(主要可能是FromWindow)
    AccessibleObjectFromWindow( hWnd, OBJID_CLIENT, IID_IAccessible, (void **) &pAcc );
    AccessibleObjectFromPoint( pt, ppAcc, pvarChild );
    AccessibleObjectFromEvent( hwnd, idObject, idChild, &pAcc, &varChild );//查询pAcc接口
    pAcc->QueryInterface( IID_IEnumVARIANT, (void **) & pUnk );
    pAcc->QueryInterface( IID_IOleWindow, (void **) & pUnk );
    pdisp->QueryInterface(IID_IAccessible, (void**) & pAccTemp );//获取子控件
    pvarChildOut->vt = VT_I4;
    pvarChildOut->lVal = CHILDID_SELF; ////CHILDID_SELFpAcc->get_accChildCount( & cChildren );
    AccessibleChildren( pAcc, 0L, cChildren, pavarChildren, & cObtained );//获取该控件的属性值
    pAcc->get_accRole( varChild, &varRetVal );
    pAcc->get_accState( varChild, &varRetVal );hr = pAcc->Invoke( IsRole ? DISPID_ACC_ROLE : DISPID_ACC_STATE, IID_NULL, 0,
    DISPATCH_PROPERTYGET, &dispp, &varRetVal, &excepInfo, &errArg);//不知道这两个是不是必须的?
    pAcc->AddRef();
    pAcc->Release();OBJID_CLIENT这个宏变量在VC6下需要自己定义,
    但是在VS2005建工程时选择支持IAccessible,系统会自动定义这个宏变量。之前写过一段代码测试只查询QueryInterface(IID_IAccessible,。。)
    不太清楚和IID_IEnumVARIANT,IID_IOleWindow有什么区别
      

  6.   

    重新看了下MSAA开发包中的DEMO程序,
    主要看的是inspect.cpp这个文件,好象主要用了下面几个接口函数。//获取pAcc接口(主要可能是FromWindow)
    AccessibleObjectFromWindow( hWnd, OBJID_CLIENT, IID_IAccessible, (void **) &pAcc );
    AccessibleObjectFromPoint( pt, ppAcc, pvarChild );
    AccessibleObjectFromEvent( hwnd, idObject, idChild, &pAcc, &varChild );//查询pAcc接口
    pAcc->QueryInterface( IID_IEnumVARIANT, (void **) & pUnk );
    pAcc->QueryInterface( IID_IOleWindow, (void **) & pUnk );
    pdisp->QueryInterface(IID_IAccessible, (void**) & pAccTemp );//获取子控件
    pvarChildOut->vt = VT_I4;
    pvarChildOut->lVal = CHILDID_SELF; ////CHILDID_SELFpAcc->get_accChildCount( & cChildren );
    AccessibleChildren( pAcc, 0L, cChildren, pavarChildren, & cObtained );//获取该控件的属性值
    pAcc->get_accRole( varChild, &varRetVal );
    pAcc->get_accState( varChild, &varRetVal );hr = pAcc->Invoke( IsRole ? DISPID_ACC_ROLE : DISPID_ACC_STATE, IID_NULL, 0,
    DISPATCH_PROPERTYGET, &dispp, &varRetVal, &excepInfo, &errArg);//不知道这两个是不是必须的?
    pAcc->AddRef();
    pAcc->Release();OBJID_CLIENT这个宏变量在VC6下需要自己定义,
    但是在VS2005建工程时选择支持IAccessible,系统会自动定义这个宏变量。之前写过一段代码测试只查询QueryInterface(IID_IAccessible,。。)
    不太清楚和IID_IEnumVARIANT,IID_IOleWindow有什么区别
      

  7.   

    之前用VB代码能够获取3.0.5版火狐浏览器中的网址,但是3.6.13版获取不到,
    没有通过pAcc查询支持的接口。用Inspect工具看了下相关接口,控件大致继承关系
    浏览器窗口-->工具栏-->搜索(或地址)组合框
    -->搜索(或地址)编辑框(网址就保存在这个编辑框中)(1)3.6.13版火狐浏览器
    [1]浏览器窗口支持接口: IEnumVarint IOleWindow (Local-oleacc-Proxy)
    [2]工具栏支持的接口: IEnumVarint (Local-oleacc-Proxy)
    [3]搜索组合框支持的接口: IEnumVarint (Local-oleacc-Proxy)
    [4]搜索编辑框支持的接口: (Local-oleacc-Proxy)(2)3.0.5版火狐浏览器
    [1]浏览器窗口支持接口: IEnumVarint IOleWindow (Local-oleacc-Proxy)
    [2]工具栏支持的接口: IEnumVarint
    [3]地址组合框支持的接口: IEnumVarint
    [4]地址编辑框支持的接口: 无
      

  8.   

    处理3.0.5版还有点效果,但是处理3.6.13版什么值都获取不到,我用下面的代码来测试的。
    ------------------------
    // msAccTestDlg.h : 头文件
    ------------------------
    #include <oleacc.h> BOOL Find ( //递归查找子控件
    IAccessible* paccParent, 
    LPSTR szName,
    LPSTR szRole,
    LPSTR szClass,
    IAccessible** paccChild,
    VARIANT* pvarChild);
    ------------------------
    // msAccTestDlg.cpp : 实现文件
    ------------------------
    //头文件
    #include <winuser.h>
    #pragma comment(lib,"oleacc.lib")//枚举查找子控件
    BOOL CmsAccTestDlg::Find (
        IAccessible* paccParent, 
    LPSTR szName,
    LPSTR szRole,
        LPSTR szClass,
        IAccessible** paccChild,
        VARIANT* pvarChild)
    {
    HRESULT hr;         //返回结果
    long numChildren;   //子控件的数量
    IEnumVARIANT* pEnum = NULL; //枚举接口
    int indexCount;             //编历子控件的索引
    BOOL found = false;         //标记是否找到需要的子控件
    IAccessible* pCAcc = NULL;  //子控件接口指针 unsigned long numFetched;
    VARIANT varChild;
    IDispatch* pDisp = NULL; char szObjName[MAX_PATH], szObjRole[MAX_PATH], szObjClass[MAX_PATH], szObjState[MAX_PATH];
      
    //给枚举接口赋值  IID_IEnumVARIANT
    hr = paccParent->QueryInterface(IID_IEnumVARIANT, (PVOID*) & pEnum); if(pEnum)
    pEnum -> Reset(); //将枚举序列重置到开始处 //获取子控件的数量 为4
    paccParent->get_accChildCount(&numChildren); for(indexCount = 1; indexCount <= numChildren && !found; indexCount++)
    {
    pCAcc = NULL; // Get next child
    if (pEnum)
    //检索枚举序列中指定数目的项
    hr = pEnum -> Next(1, &varChild, &numFetched);  
    else
    {
    varChild.vt = VT_I4;
    varChild.lVal = indexCount;
    } // Get IDispatch interface for the child
    if (varChild.vt == VT_I4)
    {
    pDisp = NULL;
    hr =paccParent->get_accChild(varChild, &pDisp);
    }
    else
    pDisp = varChild.pdispVal; // Get IAccessible interface for the child
    if (pDisp)
    {
    //返回 OK
    hr = pDisp->QueryInterface(IID_IAccessible, (void**)&pCAcc); //返回 FALSE
    hr = pDisp->Release();
    } // Get information about the child
    if(pCAcc)
    {
    VariantInit(&varChild);
    varChild.vt = VT_I4;
    varChild.lVal = CHILDID_SELF; 
    *paccChild = pCAcc;
    }
    else
    *paccChild = paccParent; //根据这个子控件接口获取子控件的相关属性
    BSTR bstrName;

    //返回 OK,但是bstrName值为空
    HRESULT hRet = (*paccChild)->get_accName(varChild, &bstrName); 
    SysFreeString(bstrName);    if (!SUCCEEDED(hRet))
    {
    AfxMessageBox(L"获取子控件Name值失败");
          // return 0;
    }
      // int kkk = 0;
        //            if (kkk >0)
    //{
    // found = true;
       //          *pvarChild = varChild;
        //          break;
    //} if(!found && pCAcc) //递归遍历
    {
    //递归枚举时子控件数量都是为 0
    found = Find(pCAcc, szName, szRole, szClass, paccChild, pvarChild); if(*paccChild != pCAcc) pCAcc->Release();
    }
    } //End of For if(pEnum) //退出循环释放资源
    pEnum -> Release(); return found;
    }//查找火狐浏览器中输入的网址
    void CmsAccTestDlg::OnBnClickedButton1()

    HWND hWndMainWindow; //浏览器窗体句柄
    IAccessible *paccMainWindow= NULL; //父控件接口
    IAccessible* paccControl= NULL;    //子控件接口
    VARIANT  varControl;     //子ID
    HRESULT hr; //返回结果 //获取 "火狐浏览器" 窗口的句柄
    if(!(hWndMainWindow = FindWindow(L"MozillaUIWindowClass", NULL)->GetSafeHwnd()))
    {
    MessageBox(L"没有发现窗口");
    } else
    {
    //获取接口指针        
    if(S_OK == (hr = AccessibleObjectFromWindow(hWndMainWindow,OBJID_CLIENT, IID_IAccessible,(void**)&paccMainWindow)))
    {
            Find (
    paccMainWindow, 
    "搜索书签和历史",  //Name属性
    "可编辑文字",      //Role属性    
    "MozillaWindowClass", //Class属性
    &paccControl,
    &varControl);  
    }
    }
    }