获取IWebBrowser2指针的方法(二)

在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)这样一个判断。

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;
}

转载:http://blog.csdn.net/tingsking18/article/details/4620144

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值