使用OLE的InternetExplorer.Application怎么取得IE页面的所有超连接?
使用OLE的InternetExplorer.Application怎么取得IE页面的所有超连接?
[解决办法]
http://www.microsoft.com/downloads/details.aspx?FamilyId=AE22E7A9-611F-4112-8B17-0980412D07A5&displaylang=en
[解决办法]
应该有个函数吧。在帮助里找找
[解决办法]
试试这个,可能有不严谨的地方
void __fastcall TForm1::Button3Click(TObject *Sender){ VARIANT va; va.vt=VT_I4; TCppShellWindows *CppShellWindows1 = new TCppShellWindows(NULL); try { long lCopies =CppShellWindows1->get_Count(); for(long i = 0;i<lCopies; i++) { TVariantInParam va(i); IWebBrowser2Ptr browser(CppShellWindows1->Item(va)); if(browser) { LPDISPATCH pDisp = NULL; browser->get_Document(&pDisp); IDispatch *spDispatch; IHTMLDocument2 *pDoc2; IHTMLElementCollection *pElementCol; IHTMLAnchorElement* pLoct ; BSTR LastURL; VARIANT index; if(pDisp) { if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc2))) { if(SUCCEEDED(pDoc2->get_links(&pElementCol))) { long p=0; if(SUCCEEDED(pElementCol->get_length(&p))) if(p!=0) { for(long i=0;i<=(p-1);i++) { V_VT(&index) = VT_I4; V_I4(&index) = i; if(SUCCEEDED(pElementCol->item(index,index,&spDispatch))) { if(SUCCEEDED(spDispatch->QueryInterface( IID_IHTMLAnchorElement,(void **) &pLoct))) { pLoct->get_href(&LastURL); Memo1->Lines->Add(LastURL); pLoct->get_hostname(&LastURL); Memo1->Lines->Add(LastURL); } pLoct->Release(); } } } pElementCol->Release(); } } } if(pDoc2) pDoc2->Release(); } } } __finally { if(CppShellWindows1!=NULL)delete CppShellWindows1; }}
[解决办法]
楼主既然说了要用OLE的方式,那就用OLE来解决。
添加一个按钮和一个Memo控件在窗体,然后:
#include <olectrls.hpp>void __fastcall TForm1::Button1Click(TObject *Sender){ Variant vBrowser; try { // 创建一个IE对象 vBrowser = Variant::CreateObject("InternetExplorer.Application"); } catch(...) { ShowMessage("创建OLE对象失败"); return; } // 打开指定网站 String strUrl = "www.ccrun.com"; vBrowser.OleProcedure("Navigate", strUrl.c_str(), EmptyParam, EmptyParam, EmptyParam, EmptyParam); // 等待浏览器打开页面完毕 while (vBrowser.OlePropertyGet("Busy")) Application->ProcessMessages(); // IE页面对象 Variant vDoc = vBrowser.OlePropertyGet("document"); // 枚举所有链接 int nLen = vDoc.OlePropertyGet("Links").OlePropertyGet("Length"); for (int i = 0; i < nLen; i++) { Variant vItem = vDoc.OlePropertyGet("Links").OleFunction("Item", i); Memo1->Lines->Add(vItem); } vDoc = Unassigned(); vBrowser = Unassigned();}