小弟被这个问题困了很久了,请达人指点一二。
我已经得到了IHTMLDocument2指针,根据它里面的方法可以得到Body,可是我想得到DIV,并根据DIV的属性来阻止它的显示(目的是拦截浮动窗口)问题:
1.我不知道怎么得到DIV
2.得到DIV以后我应该怎么修改它的属性。
我用以下方法尝试但不行。
// pDoc为IHTMLDocument2的指针
CComPtr<IHTMLElementCollection> spAll;
hr = pDoc->get_all(&spAll);
CComVariant varID = LPCOLESTR("div");
CComPtr<IDispatch> lpDisp;
long nlen;
spAll->get_length(&nlen);
CComPtr<IHTMLElement> item;
for ( int i = 0; i < nlen; ++i )
{
hr = spAll->item(varID, CComVariant(i), &lpDisp);
if ( SUCCEEDED(hr) && lpDisp != NULL ) // 在这里lpDisp永远都是NULL
{
hr = lpDisp->QueryInterface( /*IID_IHTMLElement,*/ &item );
if ( SUCCEEDED(hr) && item != NULL )
{
// 处理
}
}
}请高手指点
我已经得到了IHTMLDocument2指针,根据它里面的方法可以得到Body,可是我想得到DIV,并根据DIV的属性来阻止它的显示(目的是拦截浮动窗口)问题:
1.我不知道怎么得到DIV
2.得到DIV以后我应该怎么修改它的属性。
我用以下方法尝试但不行。
// pDoc为IHTMLDocument2的指针
CComPtr<IHTMLElementCollection> spAll;
hr = pDoc->get_all(&spAll);
CComVariant varID = LPCOLESTR("div");
CComPtr<IDispatch> lpDisp;
long nlen;
spAll->get_length(&nlen);
CComPtr<IHTMLElement> item;
for ( int i = 0; i < nlen; ++i )
{
hr = spAll->item(varID, CComVariant(i), &lpDisp);
if ( SUCCEEDED(hr) && lpDisp != NULL ) // 在这里lpDisp永远都是NULL
{
hr = lpDisp->QueryInterface( /*IID_IHTMLElement,*/ &item );
if ( SUCCEEDED(hr) && item != NULL )
{
// 处理
}
}
}请高手指点
解决方案 »
- 一个计算类的函数,放的位置不一样,结果算出来居然也不一样
- 救急啊。关于音频库G729a.lib与atlimage.h的冲突问题?
- 关于系统菜单
- windows网络编程技术源程序的下载地址是多少?
- 明天考英语三级半了,散分!
- 怎样根据文件后缀名关联启动程序?
- 如何从一个视图中打开一个新视图?
- 请问我怎样得到在Splitter的窗格中的CTabCtrl中的CTreeCtrl选择项更改通知?
- 如何在MFC中自制浏览器
- 请教如何利用硬盘序列号生成注册码?
- 需要把鱼眼镜头拍摄的超广角照片拼合成一张360度的全景图?求解决方法
- AddVectoredExceptionHandler : undeclared identifier
你上面的代码既然是放到循环里了,则应该用数字索引来检索:
hr = spAll->item(CComVariant((long)i), CComVariant(), &lpDisp);
CComQIPtr<IHTMLElement> spElement = lpDisp;
CComBSTR tagName;
spElement->get_tagName(&tagName);
if (tagName == CComBSTR("DIV"))
{
// 现在如果需要更进一步定位,则按照需求来做,比如查看DIV的某个属性是否匹配,或者某个style属性是否匹配
}如果div元素有ID或者NAME属性,那么定位方法不需要那么复杂,只需要调用
IHTMLDocument2::QueryInterface --> IHTMLDocument3
IHTMLDocument3::getElementById(L"someid", ...) --> IHTMLElement 在这里就能直接得到id='someid'的元素
请问这又是怎么回事?
CComVariant varID(i);
hr = spAll->item(varID, CComVariant(0), &lpDisp);
CComPtr<IHTMLElement> item = lpDisp;
使用这种方法得到一个DIV的IHTMLElement以后,使用item->put_outerHTML(L"");方法,但是在网页里面“查看-》源码”里面,这个DIV还是存在,我用什么方法可以把这个DIV删除
--你好。
现在我是在函数Invoke(。)的DISPID_DOCUMENTCOMPLETE事件时做的处理,可以拦截浮动窗口,但是有一种浮动窗口是在.js文件里面做的,像那样的浮动在DISPID_DOCUMENTCOMPLETE事件中拦截不了,请指点
网页脚本可以使用定时器,在定时器中产生新的div是无法在DocumentComplete中捕获到的,当然你也可以使用定时器来扫描,见一个杀一个。