1. 程式人生 > >獲取IWebBrowser2指標的方法(二)

獲取IWebBrowser2指標的方法(二)

在Internet Explorer程式設計中,獲取WebBrowser指標通常是一件很重要的事情,因為有了WebBrowser指標,我們就有了對IE完整的控制權。我們 就可以對IE瀏覽器為所欲為了,想幹什麼都可以。比方說獲取或者設定DOM控制元件的值。呼叫頁面中的JavaScript,或者控制瀏覽器的行為 比方說重新整理,前進、後退等等等等。。

 下面兩篇文章中,我將介紹兩種方法來獲取IWebBrowser2指標。

第一種

使用OLEACC.dll動態庫中的ObjectFromLresult函式來獲取。

第二種

使用IShellWindows 獲取當前瀏覽器個數,然後遍歷獲取瀏覽器物件和IWebBrowser指標。

下面介紹第二種方法:

這種方法是通過建立ShellWindows例項,得到瀏覽器物件例項的個數,通過遍歷瀏覽器物件,獲得IWebBrowser指標。

在構造SHDocVw::IWebBrowser2Ptr spBrowser物件的適合,構造不成功 就會返回NULL,這樣的化呼叫QueryInterface來獲取IWebBrowser2指標是獲取不到的。所有有了 if(spBrowser!=NULL)這樣一個判斷。

  1. IWebBrowser2*  GetWB()   
  2. {  
  3.     SHDocVw::IShellWindowsPtr m_spSHWinds;  
  4.     CComPtr<IDispatch> spDispatch;  
  5.     CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;  
  6.     CComPtr<IHTMLElement> pElement;  
  7.     CComPtr<IHTMLElementCollection> pElementCol;  
  8.     CComPtr<IHTMLFormElement> pFormElement;  
  9.     CComPtr<IHTMLInputTextElement> pInputElement;  
  10.     IWebBrowser2 * pWebBrowser = NULL;  
  11.     //建立ShellWindows例項
  12.     if (m_spSHWinds == NULL)  
  13.     {  
  14.         if (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)  
  15.         {  
  16.             MessageBox("Failed");  
  17.             CoUninitialize();  
  18.             return NULL;  
  19.         }  
  20.     }  
  21.     if (m_spSHWinds)  
  22.     {  
  23.         // 取得瀏覽器例項個數
  24.         int n = m_spSHWinds->GetCount();  
  25.         for (int i = 0; i < n; i++)  
  26.         {  
  27.             _variant_t v = (long)i;  
  28.             IDispatchPtr spDisp = m_spSHWinds->Item(v);  
  29.             SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);   //生成一個IE視窗的智慧指標
  30.             //SHDocVw::IWebBrowser2Ptr與IWebBrowser2是不一樣的
  31.             //SHDocVw::IWebBrowser2Ptr是經過COM封裝的,所以在此判斷一下
  32.             //否則QueryInterface 會出錯的。
  33.             if (spBrowser!=NULL)  
  34.             {  
  35.                 HRESULT hr = spDisp.QueryInterface(IID_IWebBrowser2, &pWebBrowser);  
  36.                 if (SUCCEEDED(hr))  
  37.                 {  
  38.                     if (pWebBrowser !=NULL)  
  39.                     {  
  40.                         return pWebBrowser;  
  41.                     }  
  42.                 }  
  43.             }  
  44.         }  
  45.     }  
  46.     return NULL;  
  47. }