Internet Explorer_Server and IWebbrowser2
Hi there,
I get the handle of Internet Explorer_Server and try to obtain the
IWebbrowser2, I find the following code from google
USES_CONVERSION;
CoInitialize( NULL );
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
if ( hInst != NULL )
{
if ( hWndChild ) // hWndChild is the handle of Internet
Explorer_Server
{
CComPtr<IHTMLDocument2> spDoc;
LRESULT lRes;
UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG,
1000, (DWORD*)&lRes );
LPFNOBJECTFROMLRESULT pfObjectFromLresult =
(LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult")
);
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
spDoc=NULL;
hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0,
(void**)&spDoc );
if ( SUCCEEDED(hr) )
{
if (spDoc)
{
CComPtr<IHTMLWindow2> spWnd;
CComQIPtr<IServiceProvider> isp;
CComQIPtr<IWebBrowser2> iwb2;
hr = spDoc->get_parentWindow ((IHTMLWindow2**)&spWnd);
if ( SUCCEEDED(hr) )
{
MessageBox(0, "OKWin", "", 0);
hr = spWnd->QueryInterface
(IID_IServiceProvider,(void**)&isp);
if ( SUCCEEDED(hr) )
{
MessageBox(0, "OKISP", "", 0);
hr = isp->QueryService(IID_IWebBrowserApp,
IID_IWebBrowser2, reinterpret_cast<void **>(&iwb2));
if (SUCCEEDED(hr)) MessageBox(0, "OKWEb", "", 0);
}
}
}
}
}
} // else document not ready
::FreeLibrary( hInst );
} // else Active Accessibility is not installed
CoUninitialize();
I can get spDoc, spWnd and isp correctly. However, IWebBrowser2(iwb2)
is always NULL. For obtaining the IWebBrowser2, I always try the
following approaches
1) directly from IHTMLDocument
spDoc->QueryInterface(IID_IServiceProvider, reinterpret_cast<void
**>(&isp));
isp->QueryService(IID_IWebBrowserApp,IID_IWebBrowser2,
reinterpret_cast<void **>(&iwb2));
2) with SID_SWebBrowserApp replace IID_IWebBrowserApp
hr = isp->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2,
reinterpret_cast<void **>(&iwb2));
3) directly from the following code
hr = (*pfObjectFromLresult)(lRes, IID_IWebBrowser2, 0,
(void**)&iwb2);
However, I try all of these ways but still get a NULL IWebBrowser2!!!!