IHTMLDocument2->get_frames()得到的是什么

本文介绍了如何使用IHTMLDocument2接口获取HTML页面中的帧集合,并详细展示了通过IHTMLFramesCollection2接口访问特定帧的过程,最终演示了如何从帧中获取IHTMLWindow2接口并进一步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  IHTMLDocument2->get_frames()得到的是什么

对于分贞的HTML,IHTMLDocument2->get_frames()函数得到的IDispatch指针到底是什么?

IHTMLDocument2  *pDoc=NULL;
pDoc=(IHTMLDocument2 *)GetHtmlDocument();    //这个是CHtmlView
                                             //IWebBrowser2使用get_Document();
IHTMLFramesCollection2 *pCol=NULL;
HRESULT hr=pDoc->get_frames(&pCol);       //取得分贞的frame数组
ASSERT(SUCCEEDED(hr));

VARIANT vFrame,vIndex;
vIndex.vt=VT_I4;    vIndex.lVal=0;          //准备取得第0号贞
hr=pCol->get_item(&vIndex,&vFrame);
ASSERT(SUCCEEDED(hr));

        //取得的这个接口指针,其实是IHTMLWindow2的接口指针。
IHTMLWindow2 *pWin=(IHTMLWindow2 *)vFrame.pdispVal;
IHTMLDocument2 *pDoc2=NULL;
hr=pWin->get_document(&pDoc2);
ASSERT(SUCCEEDED(hr));

BSTR bstr=NULL;
hr=pDoc2->get_URL(&bstr);                  //举例,比如取得URL
ASSERT(SUCCEEDED(hr))

SysFreeString(bstr);
pDoc2->Release();
pWin->Release();
pCol->Release();
pDoc->Release();
要获取IWebBrowser2中的元素id,可以使用以下步骤: 1. 通过IWebBrowser2::get_Document方法获取IHTMLDocument2接口。 2. 使用IHTMLDocument2::get_all方法获取IHTMLElementCollection接口,并使用它来搜索指定的元素。 3. 在IHTMLElementCollection中使用IHTMLElementCollection::item方法获取指定项的IHTMLElement接口。 4. 在IHTMLElement中使用IHTMLElement::get_id方法获取元素的id属性。 下面是一个示例代码: ``` IWebBrowser2* pWebBrowser = // 获取WebBrowser控件指针 IHTMLDocument2* pHTMLDoc = NULL; pWebBrowser->get_Document((IDispatch**)&pHTMLDoc); // 获取所有元素 IHTMLElementCollection* pAllElements = NULL; pHTMLDoc->get_all(&pAllElements); // 搜索指定元素 VARIANT vIndex; vIndex.vt = VT_I4; vIndex.lVal = 0; BSTR bstrTagName = L"input"; BSTR bstrType = L"text"; BSTR bstrName = L"name"; IHTMLElement* pInputElement = NULL; while (pAllElements->item(bstrTagName, vIndex, (IDispatch**)&pInputElement) == S_OK) { // 检查元素的type和name属性 CComBSTR bstrTypeValue; CComBSTR bstrNameValue; pInputElement->get_type(&bstrTypeValue); pInputElement->get_name(&bstrNameValue); if (bstrTypeValue == bstrType && bstrNameValue == bstrName) { // 获取元素的id属性 CComBSTR bstrIdValue; pInputElement->get_id(&bstrIdValue); // 在这里使用元素的id属性 break; } // 下一个元素 vIndex.lVal++; pInputElement->Release(); } pAllElements->Release(); ``` 注意,在使用完IHTMLElement接口后必须调用Release方法来释放它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值