上一篇:Serv-u6.0提权新招 >>
WebBrowser使用全接触
其实在程序中使用webbrowser其实是一件很简单的事情,因为有webbrowser可以直接使用,但是能用和用起来可不是一样的事情。下面就经常会用到的一些功能简单的介绍介绍。
1.最经常使用的自然如何屏蔽默认的ie右键菜单,并且使用自定义的菜单。这方面网上有很多的文章进行说明,我就不献丑了。因为我采用的办法据说是最没有创意的办法。在pretranslatemessage中判断。
2.其实大多数情况下,我们还需要动态的去设置webbrowser控件中的html属性,类似于自动填表之类的软件,这样的代码与监视gmmail信箱中使用的方法类似。
3.我们知道在类似的程序中,我们一般都要去截取在webbrowser中的一些javascript事件,比如adblock这样的软件就需要截取window.open这样的代码,如果我们在自己的程序中使用ie控件的话,我们会希望ie页面里的button text link就和我们在form中创建的button,text,link完全一样的被我们轻松自如的控制。
最早打算去创建一个全局的hook来监视这样的操作,但是这样做一个是太麻烦,接口过于复杂,而且也不是标准的做法。
通过查看msdn,发现其实mshtml其实是提供了这样的接口(与其说是mshtml提供的接口,不如说是com提供的接口),我用下面的代码来演示 如何来截取一个href超文本链接的操作。
on_event(cdialog1, idc_explorer1, 259, documentcompleteexplorer1, vts_dispatch vts_pvariant)
以便我们可以在所有的文档加载完成后,来分析整个的文档,然后通过监视gmmail信箱中介绍的办法找到我们要监视的href
if(strid.find(cstrlink,0) != -1){
ihtmlanchorelement * pbuttonelem = null;
hr = pdisp->queryinterface(iid_ihtmlanchorelement, (void **)&panchorelem);
hijackhref(panchorelem);
}
在hijackhref的代码中,我们通过如下的操作
hr = panchorelem ->queryinterface(iid_iconnectionpointcontainer, (void**)&pcpc);
if (hr == s_ok)
{
hr = pcpc->findconnectionpoint(diid_htmlanchorevents2, &pcp);
if (hr == s_ok)
{
if (m_phtmlevent)
{
delete m_phtmlevent;
m_phtmlevent =null;
}
m_phtmlevent = new htmlevent;
m_phtmlevent ->setparent(this);
iunknown* punk = m_phtmlevent 2->getinterface(&iid_iunknown);
hr = pcp->advise(punk, &dwcookie);
pcp->release();
}
pcpc->release();
}
至此,我们已经成功地在我们form和html之间建立起来了一座桥梁,我们只要用标准的comevent
就可以简单方便的处理所有的html事件了,下面列出一些常用的事件
"htmlelementevents2_onclick", dispid_htmlelementevents2_onclick
"htmlelementevents2_onmouseover", dispid_htmlelementevents2_onmouseover
"htmlelementevents2_onmousemove", dispid_htmlelementevents2_onmousemove
"htmlelementevents2_ondblclick", dispid_htmlelementevents2_ondblclick
"htmlelementevents2_onmouseup", dispid_htmlelementevents2_onmouseup
"htmlelementevents2_onmousedown", dispid_htmlelementevents2_onmousedown
好了,这个问题到此就结束一大半了,为什么说是一大半而不是全部呢?大家首先要回忆一下前面的红色文字,我们这样做的最大问题就是,如果我通过dhtml增加了一个element以后,hijack的程序就不能截取了,只能通过重新hijack一次了,这样多不方便呀,显然不是豆腐的作风。
告诉大家一个小诀窍,可以为我们需要操纵的element设置一个同样名称的自定义属性,比如vid,然后再定义一个vname,这样就在documentcompleteexplorer1去hook vid为特定数值的element 然后再htmlevent根据vname进行不同的操作。
至此,问题全部解决,剩下的就靠你自己了。
()
下一篇:win2k运行进程详解 >>
相关文章:
- · 删除MSSQL危险存储过程的代码
- · 硬盘分区方案大放送
- · 限制 SQL Server指定主机连接
- · SQL Server 提升权限相关命令及防范
- · Windows中提高内存效能的方法
- · Firefox的32个插件介绍
- · Linux与windows文件互传技巧
- · 配置一款漂亮的Win XP系统
- · 突破局域网对上网用户的一些限制
- · 揭露Windows中各种不老实的服务
- · 巧用TT浏览器解除下载限制
- · 防范间谍软件入侵的三个防护措施
- · 修改Windows组策略让系统更强壮
- · 加快mozilla-firefox的启动速度
- · CPU百科全书:完全指标篇
- · Linux系统中完美装载Windows分区
- · 常见硬件不兼容的典型故障解决方案
- · SQL查询语句精华使用简要
- · 与"入侵者"交手:认识XP下的NetBEUI
- · DIY超频经典教程(基础)
- · CACA基础教程
- · 超级P2P搜索引擎让所有收费网站破产
- · 轻轻松松破解还原卡
- · VPN技术详解
- · 微软ping程序源代码完整版
- · 在xp和2003下察看端口对应的进程
- · 关于BBSxp/LeadBBS的后台上传Webshell的鸡肋防范
- · 某运营商受DDOS攻击的应急响应内部文档
- · 利用FTP,实现Linux与windows文件互传
- · ADSL断流/断线问题集中分析
- · Win XP系统中网桥的配置方法
- · 网络基础:带你彻底认识路由器
- · 如何用FTP自动传送文件
- · 用Java获得IP地址
- · 一组SQLServer身份验证管理子程序
- · JavaScript与Java的区别
- · 按下某组键(HotKey)便执行某程式
- · 利用SQLEXEC突破网络妙管免费上网
