首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

使用OLE的InternetExplorer.Application如何取得IE页面的所有超连接

2012-03-02 
使用OLE的InternetExplorer.Application怎么取得IE页面的所有超连接?使用OLE的InternetExplorer.Applicati

使用OLE的InternetExplorer.Application怎么取得IE页面的所有超连接?
使用OLE的InternetExplorer.Application怎么取得IE页面的所有超连接?

[解决办法]
http://www.microsoft.com/downloads/details.aspx?FamilyId=AE22E7A9-611F-4112-8B17-0980412D07A5&displaylang=en
[解决办法]
应该有个函数吧。在帮助里找找
[解决办法]
试试这个,可能有不严谨的地方

C/C++ code
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控件在窗体,然后:
C/C++ code
#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();} 

热点排行