现在的位置: 首页 > 综合 > 正文

IE7中获取当前激活的WebBrowser2对象指针

2012年10月13日 ⁄ 综合 ⁄ 共 1845字 ⁄ 字号 评论关闭
IE7支持多页显示,要从多个页面中获取当前显示的浏览窗口的WebBrowser2对象指针。

#include "oleacc.h" // need oleacc.lib
IWebBrowser2 * GetWebBrowserObjectFromHwnd( HWND hwndHTMLDoc )
{
    IWebBrowser2 *pWebBrowser2 = NULL ;

    UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
    LRESULT lRes;
    ::SendMessageTimeout( hwndHTMLDoc , nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000 , (DWORD*) &lRes );

    CComPtr < IHTMLDocument2 > spDoc;
    HRESULT hr = ::ObjectFromLresult ( lRes, IID_IHTMLDocument2 , 0 , (LPVOID *) &spDoc );
    if( hr == S_OK && spDoc )
    {       
        CComPtr<IHTMLWindow2> spWindow ;
        hr = spDoc->get_parentWindow( &spWindow ) ;
        if( spWindow )
        {
            CComQIPtr<IServiceProvider> sp (spWindow) ;
            if( sp )
            {                                       
                if( sp->QueryService(IID_IWebBrowserApp,IID_IWebBrowser2, (void**)&pWebBrowser2) != S_OK )
                    pWebBrowser2 = NULL ;
            }
        }
    }
   
    return pWebBrowser2 ;
}

IWebBrowser2 * GetCurrentWebBrowser2()
{
    IWebBrowser2 *pWebBrowser2 = NULL ;
    ATLASSERT( m_hwndIE ) ;

    if ( bIsIE7 )
    {
        WCHAR szTitle[MAX_PATH] = L"" ;
        ::GetWindowTextW( m_hwndIE , szTitle , MAX_PATH ) ;

        HWND hwndTWC = ::FindWindowExW( m_hwndIE , NULL , L"TabWindowClass" , szTitle ) ;
        if ( hwndTWC )
        {
            HWND hwndDocView = ::FindWindowEx( hwndTWC , NULL , _T("Shell DocObject View") , NULL ) ;
            if ( hwndDocView )
            {
                HWND hwndIES = ::FindWindowEx( hwndDocView , NULL , _T("Internet Explorer_Server") , NULL ) ;
                if ( hwndIES )
                {
                    pWebBrowser2 = GetWebBrowserObjectFromHwnd( hwndIES ) ;
                }
            }

        }
    }
    else
    {
        HWND hwndDocView = ::FindWindowEx( m_hwndIE , NULL , _T("Shell DocObject View") , NULL ) ;
        if ( hwndDocView )
        {
            HWND hwndIES = ::FindWindowEx( hwndDocView , NULL , _T("Internet Explorer_Server") ,     NULL ) ;
            if ( hwndIES )
            {
                pWebBrowser2 = GetWebBrowserObjectFromHwnd( hwndIES ) ;
            }
        }
    }
    return pWebBrowser2 ;

抱歉!评论已关闭.