獲取IWebBrowser2指標的方法(二)
阿新 • • 發佈:2019-02-12
在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)這樣一個判斷。
- IWebBrowser2* GetWB()
- {
- SHDocVw::IShellWindowsPtr m_spSHWinds;
-
CComPtr<IDispatch> spDispatch;
- CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
- CComPtr<IHTMLElement> pElement;
- CComPtr<IHTMLElementCollection> pElementCol;
- CComPtr<IHTMLFormElement> pFormElement;
- CComPtr<IHTMLInputTextElement> pInputElement;
-
IWebBrowser2 * pWebBrowser = NULL;
- //建立ShellWindows例項
- if (m_spSHWinds == NULL)
- {
- if (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)
- {
- MessageBox("Failed");
- CoUninitialize();
- return NULL;
- }
- }
- if (m_spSHWinds)
- {
- // 取得瀏覽器例項個數
- int n = m_spSHWinds->GetCount();
- for (int i = 0; i < n; i++)
- {
- _variant_t v = (long)i;
- IDispatchPtr spDisp = m_spSHWinds->Item(v);
- SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); //生成一個IE視窗的智慧指標
- //SHDocVw::IWebBrowser2Ptr與IWebBrowser2是不一樣的
- //SHDocVw::IWebBrowser2Ptr是經過COM封裝的,所以在此判斷一下
- //否則QueryInterface 會出錯的。
- if (spBrowser!=NULL)
- {
- HRESULT hr = spDisp.QueryInterface(IID_IWebBrowser2, &pWebBrowser);
- if (SUCCEEDED(hr))
- {
- if (pWebBrowser !=NULL)
- {
- return pWebBrowser;
- }
- }
- }
- }
- }
- return NULL;
- }