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