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 ;
}
#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 ;
}