通过IShellWindows接口找到对应的IE窗口,从而获得IWebBrowser2接口。
代码如下:
CComPtr<IShellWindows> spShellWin;
HRESULT hr = spShellWin.CoCreateInstance(CLSID_ShellWindows);
CComPtr<IDispatch> spDispIE;
hr = spShellWin->Item(CComVariant(i), &spDispIE);
...
//当该窗口是指定的ie窗口时,获得IWebBrowser2
CComQIPtr<IWebBrowser2> spBrowser = spDispIE;如何通过IWebBrowser2接口来将该IE窗口打开的网页内容实现另存为(网页,全部*.htm;*.html)操作。
就是将网页保存为带css样式的html文件Internet ExplorerCSSHTML

解决方案 »

  1.   


    IWebBrowser2* m_pWebBrowser2; //浏览器指针
    //取得所有内容
    HRESULT GetInnerHTML(CString &strContext)
    {
    if (m_pWebBrowser2)
    {
    CComPtr<IHTMLDocument2> pHtmlDoc2 = NULL;
    HRESULT hr = m_pWebBrowser2->get_Document((IDispatch**)&pHtmlDoc2);
    if(SUCCEEDED(hr) && pHtmlDoc2)
    {
    CComPtr<IHTMLElement> pBody = NULL;
    hr = pHtmlDoc2->get_body(&pBody);
    if (SUCCEEDED(hr) && pBody)
    {
    BSTR pbBodyHtml = NULL;
    hr = pBody->get_innerHTML(&pbBodyHtml);   //类似的还有put_innerTEXT //put_innerHTML
    strContext = pbBodyHtml;
    if(pbBodyHtml)
    {
    ::SysFreeString( pbBodyHtml );
    }
    return S_OK;
    }
    }
    }
    return S_FALSE;
    }
      

  2.   

    整理一下
    IWebBrowser2* m_pWebBrowser2; //浏览器指针
    //取得所有内容
    HRESULT GetInnerHTML(CString &strContext)
    {
    if (m_pWebBrowser2)
    {
    CComPtr<IHTMLDocument2> pHtmlDoc2 = NULL;
    HRESULT hr = m_pWebBrowser2->get_Document((IDispatch**)&pHtmlDoc2);
    if(SUCCEEDED(hr) && pHtmlDoc2)
    {
    CComPtr<IHTMLElement> pBody = NULL;
    hr = pHtmlDoc2->get_body(&pBody);
    if (SUCCEEDED(hr) && pBody)
    {
    BSTR pbBodyHtml = NULL;
    hr = pBody->get_innerHTML(&pbBodyHtml);   //类似的还有put_innerTEXT //put_innerHTML
    strContext = pbBodyHtml;
    if(pbBodyHtml)
    {
    ::SysFreeString( pbBodyHtml );
    }
    return S_OK;
    }
    }
    }
    return S_FALSE;
    }
      

  3.   

    谢谢
         yfqvip 
        满衣兄 不过你的方法是获取DOM对象里面的html内容,里面的内容已经没有css样式了。这样的话获得的html内容太大。
    请问有没有其他方式实现IE浏览器的另存为(网页,全部*.htm;*.html)的功能?
      

  4.   

    这个就不知道了,找了几个,你看看有没有帮助:
    http://bbs.csdn.net/topics/10450810
    http://bbs.csdn.net/topics/10294635
    http://bbs.csdn.net/topics/70168367
      

  5.   

    谢谢
         yfqvip 
        满衣兄 你的方法只能获取body里面的内容。
    请问有没有方法获取整个网页里面的内容。
    相当于IE窗口的 查看->源文件 里面的内容。谢谢!