关于IWebBrowser2和MS Active Accessibility接口问题

amloy520 2009-10-11 03:45:46

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抓取的,所以应该是没问题的,网上有人说这样是可以,但我总调不成功。
...全文
78 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
amloy520 2009-10-21
  • 打赏
  • 举报
回复
dwRes的值是没问题的,我凋试过,如果窗体不存在dwRes回为0,具体的值不记得了。
WaistCoat15 2009-10-11
  • 打赏
  • 举报
回复
::SendMessageTimeout(hTempWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, &dwRes);

dwRes值是多少?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧