• 获取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

  • 相关阅读:
    网站设计大访问量应用的解决方案
    粘贴剪辑版中的数据
    C#中DateTime
    汇总c#.net常用函数和方法集
    ASP.NET配置文件Web.config 详细解释
    URL验证
    把一个下拉框中的选项添加到另一个中
    显示年月日星期和(变动的)时间
    sqlserver 查询版本号
    FreeMarker(三)Map和List
  • 原文地址:https://www.cnblogs.com/hackpig/p/1668258.html
Copyright © 2020-2023  润新知