请问获得IHTMLDocument的接口指针后,如何获取这个网页中指向IFrame的接口指针,如何遍历这个网页中的IFrame个数啊?问题一解决,立即给分!
解决方案 »
- 问题求解,代码已经附上
- 用ShellExecute调用控制台程序,如何取消控制台界面?
- 关于ImmGenerateMessage函数的问题
- MFC对话框如何调用自己写的类!!!!!!!!!!!
- 散分100,送给2009年末一位幸运者.
- 各位大侠:怎样去掉对话框右上角的关闭(X号)。。在线急等!!
- 如何显示文件中的图片,急!谢谢!
- 哈哈哈哈哈 要学技术的 就一起加油
- listcontrol加载图标失败
- 关于listControl问题
- 用get_innerHTML获得内容后再调用put_innerHTML原封不动回回网页,发现网页中的js控件不能用了,请问谁知道这是怎么回事?
- 【急~】音量调节问题
VARIANT frameOut;
IHTMLFramesCollection2* pFramesCol;
IHTMLWindow2* pRightFrameWindow;
IHTMLDocument2* pRightDoc;
frameRequested.vt = VT_BSTR;
frameRequested.bstrVal = L"rightframe";
hr = pWin->get_frames(&pFramesCol);
hr = pFramesCol->item(&frameRequested, &frameOut);
hr = frameOut.pdispVal->QueryInterface(IID_IHTMLWindow2, (void**)&pRightFrameWindow);
hr = pRightFrameWindow->get_document(&pRightDoc);
IHTMLDocument3::getElementsByTagName("iframe")
然后调用get_length就能得到frame的个数,调用item(index)就能得到每个iframe
这个看看.
// 枚举Frame
CComPtr<IDispatch> spDisp;
spDisp.p = m_myie.GetDocument();
EnumFrame(spDisp.p);bool EnumFrame(LPDISPATCH pDisp)
{
bool bToContinue = true;
// 检查文档状态
CheckDocStatus(spDisp.p);
CComQIPtr<IHTMLDocument2> pHTMLDocument2(spDisp);
if (pHTMLDocument2)
{
IHTMLFramesCollection2 *pCol=NULL;
HRESULT hr;
hr=pHTMLDocument2->get_frames(&pCol); //取得分帧的frame数组
if (SUCCEEDED(hr))
{
long p;
CComVariant varIndex,varFrame;
hr = pCol->get_length(&p);
if (SUCCEEDED(hr))
{
for (int i = 0; bToContinue && i < p; i++)
{
varIndex = i;
hr = pCol->item(&varIndex,&varFrame);
if (SUCCEEDED(hr))
{
IHTMLDocument2 *pDoc2=NULL;
hr=((IHTMLWindow2 *)varFrame.pdispVal)->get_document(&pDoc2);
if (SUCCEEDED(hr))
{
EnumFrame(pDoc2);
CComBSTR bstrUrl;
hr=pDoc2->get_URL(&bstrUrl);
if (SUCCEEDED(hr))
{
TRACE("get_document get_URL: %s\r\n",CString(bstrUrl));
}
// 检查文档状态
if (!CheckDocStatus(pDoc2))
{
bToContinue = false;
}
pDoc2->Release();
}
}
}
TRACE("Frames get_length: %ld\r\n",p);
}
pCol->Release();
}
}
return bToContinue;
}