类:CVBIEWindows —— 搜索所有可能使用IE控件的浏览器窗口

supergreenbean 2007-03-02 05:14:17
类:CVBIEWindows —— 搜索所有可能使用IE控件的浏览器窗口
下载地址:http://yuan505.vicp.net/cy_filesxxx/vbsrc/VBIEWindows.rar

现在有很多基于IE核心(shdocvw.dll)的东西,比如MyIE,腾迅的那个什么浏览器之类的。那么如何获得正在运行的所有基于IE核心的浏览器窗口呢?一般的,这些窗口的类名会叫做“Shell Embedding”,通过向这种类名的窗口发送WM_GETSHELLBROWSER消息,就能得到一个IShellBrowser接口。然后通过这个接口,我们就能得到可以控制浏览器对象的IWebBrowser2接口。当然,系统中也存在着一些虽然类名不是“Shell Embedding”,但是同样也会响应WM_GETSHELLBROWSER消息的窗口,并且其中的一些同样也可以进而获得IWebBrowser2接口,例如SysTreeView32窗口。对于这些非“Shell Embedding”的窗口,我的建议是,尽量不要去碰它们,因为弄不好你就会让它们崩溃。

OK,现在我们的问题已经转化为如何查找所有类名为“Shell Embedding”的窗口,很显然,这个问题就简单多了。EnumWindows和EnumChildWindows两个API函数就能帮我们搞定一切。找到了目标窗口后如何获得接口的活儿我在前些时候就已经做过了,大家可以看这里 类:CVBWebBrowserHunter —— 通过指定Shell Embedding类窗口句柄获得浏览器对象 。

EnumWindows和EnumChildWindows函数都是需要进行回调的函数,这就意味着我们需要在工程里新添加个模块文件用来放回调函数。为了使这个类看起来能够貌似简洁,我没有添加任何模块文件,而是通过加入汇编代码的方式将回调函数也放在类中。这样,貌似比较方便了吧……

写的有点匆忙,估计会有大量的bug,请大家领会精神便好,呵呵
...全文
422 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
清晨曦月 2007-03-18
......雪貂都把人顶疼了吧...哈哈

Shell32.Shell.Windows

....回家研究研究................哈哈......似乎里面有点隐情.前天看了看里面似乎还有点幽径
回复
我是专程来顶楼主的
回复
dapha 2007-03-13
在偶的win2003 点 step 1 程序马上down掉
回复
supergreenbean 2007-03-05
IE7的Tab浏览器也可以像Maxthon一样通过Shell32.Shell.Windows来枚获得。我目前写的代码只是查找Shell Embedding窗口。当然,用包里的CVBWebBrowserHunter类可以直接获得Tab窗口里的浏览器对象
回复
colorslife 2007-03-05
支持
回复
蒋晟 2007-03-05
测试了IE7的Tab么?
回复
清晨曦月 2007-03-04
象绿豆致敬!
虽然每次拜读豆豆的代码都非常的自卑...但很快就被代码的精湛冲走了........
趁这几天还有兴趣研究IE这破玩意,抓紧研究~~
回复
kmlxk0 2007-03-04
高手~!学习
回复
汗一个....绿豆好久没有出现了....

我也来顶一下
回复
supergreenbean 2007-03-02
一般使用shdocvw.dll来实现浏览器功能的应用程序中所创建的浏览器窗口都会是Shell Embedding类名的,基于这一点我的程序才能正常工作。而系统中其他的IE程序,比如internet explorer,explorer甚至最新的maxthon等则可以通过Shell.Windows来取得其引用。

另外,昨天测试的时候发现QQ的群消息之类的窗口也被抓了下来,呵呵,挺好玩的
回复
VBAHZ 2007-03-02
还没来得急看,偶刚做了个EnumWindows的代码,还在想ChildWindows的事情,
没想到这么快就有了:)

但我在想,能不能跟踪新建的IE对象呢?
(会不会每开一个IE新页面——不管在哪个程序中,是不是有个系统级消息事件什么的?
标准IE页面好像有?但在MyIE2中。。。不太清楚哦?)
我想要实现的是自动绑定新建的IE页面对象,这样就能自动获取鼠标在页面上的事件了,
单纯的靠搜索静态的句柄类名,效率是不是很低?


另外,老大,俺找了个虽然不是很完美,但比较简便的办法:

就像zcsor(偶业余的斗胆写点blog(IE表单自动填写相关内容更新ing)) 写的
——用ShellWindows集合!

很奇怪的是,在偶家里就能得到所有的页面,
包括俺程序里的WebBrower控件(偶以前试过明明不行的呀?)
原以为找到了超级捷径的虫洞空间,没想到接下来就受到严重打击——
换一台电脑就不行,搞不懂呀,看下来的区别在于,偶家里用的是MaxThon(就是MyIE2的升级版),而另一台电脑用的是(MyIE2),但也不至于一台能捕捉我程序里的WebBrower
而另一台不行?凭什么呀?但也看过,偶家里的MyIE2确实不在ShellWindows集合里:)
奇怪???
回复
chenhui530 2007-03-02
好东西下载下来研究下
回复
VBAHZ 2007-03-02
偶是第一个顶滴!
为啥没分呢?呵呵:)

回复
相关推荐
发帖
API
创建于2007-09-28

1464

社区成员

VB API
申请成为版主
帖子事件
创建了帖子
2007-03-02 05:14
社区公告
暂无公告