zoukankan      html  css  js  c++  java
  • 递归枚举IHTMLDocument2的所有元素

    void  EnumHTMLDocument( MSHTML::IHTMLDocument2* pDoc )
    {
        
    if( pDoc == NULL )return;

        
    //遍历搜索子框架,递归处理子框架的文档
        CComPtr<MSHTML::IHTMLFramesCollection2>  spFramesCollection;

        pDoc
    ->get_frames( &spFramesCollection );

        
    long lCount = 0;
        HRESULT hr 
    = spFramesCollection->get_length( &lCount );
        
    if( FAILED( hr ) )return;

        
    for ( long lIndex = 0; lIndex < lCount; lIndex++ )
        {
            CComVariant  vDispWin;
            vDispWin  
    = spFramesCollection->item( &CComVariant( lIndex ) );

            CComQIPtr
    <MSHTML::IHTMLWindow2>  spWin = vDispWin.pdispVal;
            
    if( spWin == NULL )continue;

            CComPtr
    <MSHTML::IHTMLDocument2> spSubDoc;
            spWin
    ->get_document( &spSubDoc );

            EnumHTMLDocument( spSubDoc );
        }

        CComQIPtr
    <MSHTML::IHTMLElementCollection>  spElementCollection;
        hr  
    =  pDoc->get_forms( &spElementCollection );
        
    if( FAILED( hr ) )return;

        
    long lFormCount = 0;
        hr  
    = spElementCollection->get_length( &lFormCount );
        
    if( FAILED( hr ) )return;

        
    for ( long lIndex = 0; lIndex < lFormCount; lIndex++ )
        {
            CComQIPtr
    <MSHTML::IHTMLFormElement> spFormElement =    spElementCollection->item(  &CComVariant( lIndex ) );
            
    if( spFormElement == NULL )continue;

            
    long lElemCount = 0;
            hr  
    = spFormElement->get_length( &lElemCount );
            
    if( FAILED( hr ) )continue;

            
    for ( long lElemIndex = 0; lElemIndex < lElemCount; lElemIndex++ )
            {
                CComDispatchDriver  spInputElement;
                spInputElement  
    =  spFormElement->item( &CComVariant( lElemIndex ) );
                
    if( spInputElement == NULL )continue;

                CComVariant varName, varValue, varType;
                hr 
    = spInputElement.GetPropertyByName( L"name"&varName );
                
    if( SUCCEEDED( hr ) )
                {
                    LPCTSTR lpszName 
    = varName.bstrVal ? COLE2CT( varName.bstrVal ) : _T("NULL");
                    AtlMessageBox( NULL, lpszName );
                }

                hr 
    = spInputElement.GetPropertyByName( L"value"&varValue );
                
    if( SUCCEEDED( hr ) )
                {
                    LPCTSTR lpszValue 
    = varValue.bstrVal ? COLE2CT( varValue.bstrVal ) : _T("NULL");
                    AtlMessageBox( NULL, lpszValue );
                }

                hr 
    = spInputElement.GetPropertyByName( L"type"&varType );
                
    if( SUCCEEDED( hr ) )
                {
                    LPCTSTR lpszType 
    = varType.bstrVal ? COLE2CT( varType.bstrVal ) : _T("NULL");
                    AtlMessageBox( NULL, lpszType );
                }
            }
        }

    }
  • 相关阅读:
    25个PHP游戏编程脚本代码(转)
    [AJAXJSP]使用DWR框架验证用户名是否存在
    [AJAXJSP]验证用户名存在
    [Java基础]多线程求和小例子
    [JAVA算法]求子数组的最大和
    [JQury] slideToggle闪烁问题及解决办法
    [JAVA算法]递归求Fibbonicc序列方法
    Easy ui Datagrid(下拉、复选、只输入数字、文本) 追加、删除、更改
    Easy ui DataGrid 添加复选框 与 下拉
    Easy ui DataGrid 列文字多串行问题解决方案
  • 原文地址:https://www.cnblogs.com/fangkm/p/1426530.html
Copyright © 2011-2022 走看看