- 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 );
- }
- }
- }
- }