zoukankan      html  css  js  c++  java
  • 获取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

  • 相关阅读:
    puppeteer 模拟登录淘宝
    基于Istio构建微服务安全加固平台的探索
    试着给VuePress添加全局禁止爬取支持,基于vuepress-plugin-robots
    关于Word转Markdown的工具Typora安装及使用
    关于基于Nexus3和Docker搭建私有Nuget服务的探索
    关于Kubernetes(简称K8S)的开启及基本使用,基于Docker Desktop & WSL2
    关于WLS2中Ubuntu启用SSH远程登录功能,基于Xshell登录,支持Root
    关于Ubuntu开启ifConfig和Ping命令的支持,查看本机Ip地址和检查外部连接
    关于.Net Core使用Elasticsearch(俗称ES)、Kibana的研究说明
    关于使用Draw.io画数据库E-R图的说明
  • 原文地址:https://www.cnblogs.com/hackpig/p/1668258.html
Copyright © 2011-2022 走看看