




























用过IE开发工具条的朋友对IE这个工具进行枚举的方式都会有些好奇,它是如何将一个网页中所有的元素都枚举出来的,在网页上,可能大家都学过通过JAVASCRIPT访问DOM对象来取得数据,其实在BHO中是相似的,只是要注意一些事项。
首先,我们肯定是已经定义了一个
CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> m_spWebBrowser2;
而且通过SetSite方法已经将其与IE进行挂接,如果你不清楚这一点,可以在网上查找一篇文章《VC++开发BHO插件——定制你的浏览器》
其次,我们新建一个Dialog,并在其上放置一个 TreeViewCtrl,其ID为IDC_TREE1
接下来我们就可以通过 m_spWebBrowser2这个成员变量来获取数据了。
代码
代码
通过上面的代码,我们就可以将整个HTML的内容生成一个DOM结构放在一个树里面,并且每个节点中都存放了一个IHTMLElement的指针,通过它我们可以做更多的事。
比如我们可以取得某一个节点的Source
代码
代码
//我们还可以像IE开发工具条一样,点击某一个节点,在IE上面高亮显示
bool HTMLElementRect(IHTMLElement *pElement, RECT &rect)
{
memset(&rect,0, sizeof(rect));
if( pElement==NULL )
return false;
pElement
->get_offsetWidth(&rect.right);IHTMLElement
*pParentElement= NULL, *pTemp;CComQIPtr
<IHTMLElement2> pElement2 = pParentElement;pElement2
->get_scrollLeft(&lx);rect.left
-= lx;CTreeItem item
= ctrl.GetSelectedItem(); RECT rect;
HTMLElementRect(pItem, rect);
HWND hWndParent
= (HWND)nBrowser;hWndParent
= FindWindowEx(hWndParent, NULL, "Shell DocObject View", NULL);HBRUSH hBrush;
hBrush
= CreateSolidBrush(RGB(255,0,0)); CBrush pBrush((HBRUSH)GetStockObject(NULL_BRUSH));
SelectObject(hdc, CreatePen(PS_DASHDOTDOT,
{
::Rectangle(hdc, rect.left, rect.top, rect.left
+ rect.right, rect.top + rect.bottom);Sleep(
400); SetROP2(hdc,R2_NOTXORPEN);
}
::DeleteObject(hBrush);
::ReleaseDC(hWndParent, hdc);
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。