现在的位置: 首页 > 综合 > 正文

获取IWebBrowser2指针的方法(二)

2013年09月22日 ⁄ 综合 ⁄ 共 2057字 ⁄ 字号 评论关闭

在Internet Explorer编程中,获取WebBrowser指针通常是一件很重要的事情,因为有了WebBrowser指针,我们就有了对IE完整的控制权。我们 就可以对IE浏览器为所欲为了,想干什么都可以。比方说获取或者设置DOM控件的值。调用页面中的JavaScript,或者控制浏览器的行为 比方说刷新,前进、后退等等等等。。

 下面两篇文章中,我将介绍两种方法来获取IWebBrowser2指针。

第一种

使用OLEACC.dll动态库中的ObjectFromLresult函数来获取。

参见:获取IWebBrowser2指针的方法(一)

第二种

使用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;  

抱歉!评论已关闭.