社区
ATL
帖子详情
如何用BHO获取当前浏览网页的某个控件的坐标? 50分
snmhm1991
2012-03-30 01:46:41
怎么获取当前网页中某个按钮或者其他控件、元素的位置呢?或许这里所说的一个按钮在网页中其实就是一张图片而已,如何获取此时控件的位置?
...全文
231
5
打赏
收藏
如何用BHO获取当前浏览网页的某个控件的坐标? 50分
怎么获取当前网页中某个按钮或者其他控件、元素的位置呢?或许这里所说的一个按钮在网页中其实就是一张图片而已,如何获取此时控件的位置?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
stunix
2014-10-11
打赏
举报
回复
有frame的情况下怎么获取元素的屏幕坐标呢
panqw001
2013-12-03
打赏
举报
回复
受益不小
snmhm1991
2012-03-30
打赏
举报
回复
接下来还有一个问题摆在我的面前就是我想使这个获得的坐标转化为相对于IE8,IE9中某一个Tab的相对坐标。或许当前这个元素不在当前Tab的视图范围内,但是我要获取只要元素只要出现在Tab中就获取其相对于Tab的相对坐标,再接再历。。。不知道是不是已经有人这么做过了?
snmhm1991
2012-03-30
打赏
举报
回复
问题解决了,现在贴上自己的代码如果有相同问题的朋友可以参考下:
POINT CFloatWnd::GetElemPoint(CString ElemID){ //这里的ElemID是网页中元素(控件的ID),可以通过VS2010打开网页的源码然后用VS2010编译一次就可以获取它的ID号,然后在这里可以直接以CString传递进来
POINT point; //存放元素坐标
HRESULT hr=NULL;
CComPtr<IDispatch> pDisp;
CComPtr<IHTMLDocument2> pDoc;// 必须要添加 #include <mshtml.h> 头文件
IHTMLElementCollection* pColl=NULL;
hr=mWebBrowser2->get_Document(&pDisp);
pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
pDoc->get_all(&pColl);
CComPtr<IDispatch> pDisp2;
VARIANT index;
VARIANT ID;
V_VT(&index)=VT_I4;
V_I4(&index)=0;
ID=StringToVariant(ElemID); //通过VS2010打开HTML文件或者网页源代码获取ID
hr=pColl->item(ID,index,&pDisp2); //获取指定ID的元素
if(hr==S_OK && pDisp2!=NULL){
CComPtr<IHTMLElement> pElem;
hr=pDisp2->QueryInterface(IID_IHTMLElement,(void**)&pElem);
if(hr==S_OK && pElem!=NULL){
long top=0;
long left=0;
long width=0;
long height=0;
long value=0;
IHTMLElement* hContainer=NULL;
pElem->get_offsetTop(&top); //获取顶部位置 (获取的是相对于父节点的相对坐标)
pElem->get_offsetLeft(&left);
pElem->get_offsetWidth(&width); //获取顶部位置
pElem->get_offsetHeight(&height);
hr=pElem->get_offsetParent(&hContainer); //其真实坐标应该是所有的父结点的坐标的叠加,所以有以下循环
while ( hContainer )
{
hContainer->get_offsetLeft(&value);
left += value;
hContainer->get_offsetTop(&value);
top += value;
hContainer->get_offsetParent(&hContainer);
}
point.x=left;
point.y=top;
//-----------------------获取到元素后就可以对该元素进行操作了---------------------------
//-------如下:
WCHAR* title;
pElem->get_title(&title); //成功获取按钮
USES_CONVERSION;
CString Title=W2A(title);
CString Msg;
Msg.Format("top:%ld,left:%ld,width:%ld,height:%ld",top,left,width,height);
if(hContainer!=NULL)
hContainer->Release(); //此时由于上面的循环hContainer已经为0了
// AfxMessageBox(Title+" "+Msg);
// pElem->Release(); //智能指针不用释放,也不能直接释放
}
}
pColl->Release(); //释放所有接口
return point;
}
VARIANT StringToVariant(CString str){ //CString转VARIANT
VARIANT variant;
VariantInit(&variant);
variant.vt=VT_BSTR;
variant.bstrVal=str.AllocSysString();
return variant;
}
fishion
2012-03-30
打赏
举报
回复
如果能得到IHTMLDocument2接口的话,再得到那个控件的IHTMLElement 接口,然后就能使用这个接口的offsetLeft,offsetTop,offsetWidth,offsetHeight来得到控件的坐标了
C#
获取
网页
中某个元素的位置,并模拟点击
当然我们可以动态改变它的CSS,让它在特定的位置显示出来,但这个方法只对比较简单的
网页
有效。 那我们怎么才能得到
网页
的位置呢,首先我们来看一张图片 从这里我们可以看到五个offset的属性,这里我们...
从钓鱼与
BHO
角度看在线支付安全问题
发到安全文摘不知道能不能通过。...先是安全
控件
的问题,然后网站也出了各类漏洞,今天我从钓鱼和
BHO
的角度看一下在线支付系统的安全问题。说道钓鱼大家肯定很熟悉,最常说的就是假冒中国工商银行域名,www
捕获按钮点击事件
30/*X
坐标
*/,110/*Y
坐标
*/, 1
50
/*宽度*/,
50
/*高度*/, hWnd, (HMENU)2/*
控件
唯一标识符*/, hInst, NULL ); //设置按钮字体 SendMessage(hStatic, WM_SETFONT, (WPARAM)hFont, NULL);//...
基于WPF的开发的知识点
System.Windows.Media.Visual类:为 WPF 中的呈现提供支持,其中包括命中测试、
坐标
转换和边界框计算等。 System.Windows.UIElement 类:UIElement 是 WPF 核心级实现的基类,该类建立在 Windows Presentation ...
基础
用vc++调试编制的组件怎样画一个箭头?高
分
请教如何限制程序运行的方法?求助:通过编程DirectX抓屏------>masterz:再麻烦你一下,谢谢熟悉RichEdit的朋友过来看一下,RichEdit的几个问题.如何对 I/O 端口进行操作?有...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章