关于IWebBrowser2和MS Active Accessibility接口问题
IWebBrowser2* CDoHtml::GetWebBrowser(CString &strError,HWND hIEWindow)
{
HWND hTempWnd = (NULL != hIEWindow)?hIEWindow:GetIEHandle();
//显示装载OLEACC.DLL才知道有没有安装MSAA
HINSTANCE hInst = LoadLibrary( _T("OLEACC.DLL") );
if( NULL == hInst )
{//如果没有安装MSAA
MessageBox(NULL,_T("Please Install Microsoft Active Accessibility"),"Error",MB_OK);
return NULL;
}
IWebBrowser2* pWebBrowser2=NULL;
UINT nMsg = ::RegisterWindowMessage("WM_HTML_GETOBJECT");
DWORD dwRes;
::SendMessageTimeout(hTempWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, &dwRes);
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
CComPtr<IHTMLDocument2>spDoc;
hr=pfObjectFromLresult(dwRes,IID_IHTMLDocument2,0,(void**)&spDoc);
if ( SUCCEEDED(hr) )
{
CComPtr<IHTMLWindow2>spWnd2;
CComPtr<IServiceProvider>spServiceProv;
hr=spDoc->get_parentWindow ((IHTMLWindow2**)&spWnd2);
if(SUCCEEDED(hr))
{
hr=spWnd2->QueryInterface (IID_IServiceProvider,(void**)&spServiceProv);
if(SUCCEEDED(hr))
{
hr = spServiceProv->QueryService(SID_SWebBrowserApp,IID_IWebBrowser2,(void**)&pWebBrowser2);
}
}
}
}
::FreeLibrary(hInst);
return pWebBrowser2;
}
上述代码是网上高手的实现,奇怪的是pfObjectFromLresult()总是调用不成功,返回-2147467259,hIEWindow这个句柄我是用spy直接在IExplorer抓取的,所以应该是没问题的,网上有人说这样是可以,但我总调不成功。