IE7中獲取當前激活的WebBrowser2對象指針

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 ;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章