获取ie进程的IHTMLDocument2接口后,get_frames成功返回,但返回的IHTMLFramesCollection2调用get_length失败

soulyale 2015-12-03 01:07:02



CoInitialize( NULL );

// 显式加载MSAA,这样我们就可以知道它是否已经被安装
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
if ( hInst != NULL )
{
if ( hWnd != NULL )
{
HWND hWndChild=NULL;
// 获取第一个文档的窗口句柄
::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&hWndChild );
if ( hWndChild )
{
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, "ObjectFromLresult" );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument2, 0, (void**)&spDoc );
if ( SUCCEEDED(hr) )
{
CComPtr<IDispatch> spDisp;
CComPtr<IHTMLElement> spEle;
CComPtr<IHTMLElement2> spEle2;
CComPtr<IHTMLDocument3> spDoc3;
CComPtr<IHTMLElementCollection> spEleCollect;
CComPtr<IHTMLFramesCollection2> spFreCollect;
CComPtr<IHTMLWindow2> spWin2;
spDoc->get_frames(&spFreCollect);///////获取框架集合

long nFrameCount=0;

hr=spFreCollect->get_length(&nFrameCount);//nFrameCount的值为零,网页里有4个框架
////////////////////////但我通过单进程(就是通过mfc内嵌网页 )调用 框架数目是正确的,请问是什么原因?


}
}
} // else 文档未就绪
} // else IE未运行
::FreeLibrary( hInst );
} // else MSAA未安装
CoUninitialize();









...全文
173 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-12-03
  • 打赏
  • 举报
回复
To initialize a thread as free-threaded, call CoInitializeEx, specifying COINIT_MULTITHREADED.
soulyale 2015-12-03
  • 打赏
  • 举报
回复
测试的浏览器是ie11

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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