IHTMLDocument2::elementFromPoint MethodReturns the element for the specified x and y coordinates. SyntaxHRESULT elementFromPoint( long x, long y, IHTMLElement **elementHit );或者可以考虑BHO
HRESULT CApp::GetAllImgs() { HRESULT hr; if ((!m_pMSHTML)||(READYSTATE_COMPLETE != m_lReadyState)) { ODS("Shouldn't get here 'til MSHTML changes readyState to READYSTATE_COMPLETE\n"); //DebugBreak(); return E_UNEXPECTED; } IHTMLElementCollection* p_imgColl = NULL; if (SUCCEEDED(hr = m_pMSHTML->get_all( &p_imgColl ))) { long cElems=0; // retrieve the count of elements in the collection if (SUCCEEDED(hr = p_imgColl->get_length( &cElems ))) { for ( int i=0; i<cElems; i++ ) { VARIANT vIndex; vIndex.vt = VT_UINT; vIndex.lVal = i; VARIANT var2 = { 0 }; LPDISPATCH pDisp; if (SUCCEEDED(hr = p_imgColl->item( vIndex, var2, &pDisp ))) { bool b_print_tag=true; if(b_print_tag) { IHTMLImgElement* pImage = NULL; if (SUCCEEDED(hr = pDisp->QueryInterface( IID_IHTMLImgElement, (LPVOID*)&pImage ))) { BSTR bstr; pImage->get_src(&bstr); pImage->Release(); b_print_tag=false; if (bstr) { SaveImg(bstr); SysFreeString(bstr); } } } pDisp->Release(); } // item } // for } // get_length p_imgColl->Release(); } IHTMLElementCollection* pColl = NULL; if (SUCCEEDED(hr = m_pMSHTML->get_all( &pColl ))) { long cElems=0; // retrieve the count of elements in the collection if (SUCCEEDED(hr = pColl->get_length( &cElems ))) { for ( int i=0; i<cElems; i++ ) { VARIANT vIndex; vIndex.vt = VT_UINT; vIndex.lVal = i; VARIANT var2 = { 0 }; LPDISPATCH pDisp; if (SUCCEEDED(hr = pColl->item( vIndex, var2, &pDisp ))) { IHTMLInputElement* pInput=NULL; if (SUCCEEDED(hr = pDisp->QueryInterface( IID_IHTMLInputElement, (LPVOID*)&pInput ))) { BSTR bstr; pInput->get_src(&bstr); pInput->Release(); if (bstr&&SysStringLen(bstr)>4) { SaveImg(bstr); SysFreeString(bstr); } } pDisp->Release(); } // item } // for } // get_length pColl->Release(); } // get_all // We're done so post ourselves a quit to terminate the message pump. PostQuitMessage(0); return hr; }
{
USES_CONVERSION; // Получаем коллекцию тэгов <IMG>
CComQIPtr<IHTMLElementCollection, &IID_IHTMLElementCollection> pImages;
pDoc->get_images( &pImages); long nImages;
pImages->get_length( &nImages);
for (int i=0; i<nImages; i++)
{
CComVariant v1( i), v2;
CComQIPtr<IDispatch, &IID_IDispatch> pDisp;
CComQIPtr<IHTMLImgElement, &IID_IHTMLImgElement> pImg;
pImages->item( v1, v2, &pDisp);
pImg = pDisp;
CComBSTR bstr;
pImg->get_src( &bstr); CString fname;
fname.Format( "%simg_%d.gif", sPath, i);
if( SUCCEEDED( URLDownloadToFile( 0, W2A( bstr), fname, 0, 0) ) )
{
bstr = fname;
pImg->put_src( bstr.Copy());
}
}
}
long x,
long y,
IHTMLElement **elementHit
);或者可以考虑BHO
{
HRESULT hr;
if ((!m_pMSHTML)||(READYSTATE_COMPLETE != m_lReadyState))
{
ODS("Shouldn't get here 'til MSHTML changes readyState to READYSTATE_COMPLETE\n");
//DebugBreak();
return E_UNEXPECTED;
}
IHTMLElementCollection* p_imgColl = NULL;
if (SUCCEEDED(hr = m_pMSHTML->get_all( &p_imgColl )))
{
long cElems=0;
// retrieve the count of elements in the collection
if (SUCCEEDED(hr = p_imgColl->get_length( &cElems )))
{
for ( int i=0; i<cElems; i++ )
{
VARIANT vIndex;
vIndex.vt = VT_UINT;
vIndex.lVal = i;
VARIANT var2 = { 0 };
LPDISPATCH pDisp;
if (SUCCEEDED(hr = p_imgColl->item( vIndex, var2, &pDisp )))
{
bool b_print_tag=true;
if(b_print_tag)
{
IHTMLImgElement* pImage = NULL;
if (SUCCEEDED(hr = pDisp->QueryInterface( IID_IHTMLImgElement, (LPVOID*)&pImage )))
{
BSTR bstr;
pImage->get_src(&bstr);
pImage->Release();
b_print_tag=false;
if (bstr)
{
SaveImg(bstr);
SysFreeString(bstr);
}
}
}
pDisp->Release();
} // item
} // for
} // get_length
p_imgColl->Release();
}
IHTMLElementCollection* pColl = NULL; if (SUCCEEDED(hr = m_pMSHTML->get_all( &pColl )))
{
long cElems=0;
// retrieve the count of elements in the collection
if (SUCCEEDED(hr = pColl->get_length( &cElems )))
{
for ( int i=0; i<cElems; i++ )
{
VARIANT vIndex;
vIndex.vt = VT_UINT;
vIndex.lVal = i;
VARIANT var2 = { 0 };
LPDISPATCH pDisp;
if (SUCCEEDED(hr = pColl->item( vIndex, var2, &pDisp )))
{
IHTMLInputElement* pInput=NULL;
if (SUCCEEDED(hr = pDisp->QueryInterface( IID_IHTMLInputElement, (LPVOID*)&pInput )))
{
BSTR bstr;
pInput->get_src(&bstr);
pInput->Release();
if (bstr&&SysStringLen(bstr)>4)
{
SaveImg(bstr);
SysFreeString(bstr);
}
}
pDisp->Release();
} // item
} // for
} // get_length
pColl->Release();
} // get_all
// We're done so post ourselves a quit to terminate the message pump.
PostQuitMessage(0);
return hr;
}
if (bstr)
{SaveImg(bstr);
SysFreeString(bstr);
}
SaveImg()具体是怎么实现的?也是用URLDownloadToFile函数吗?