获取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)这样一个判断。
view plaincopy to clipboardprint?
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;  
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tingsking18/archive/2009/09/30/4620144.aspx

posted @ 2010-02-14 17:43  猪悟能  阅读(786)  评论(0编辑  收藏  举报