IE9双击标签页关闭当前选项卡的工具
添加评论
2011年4月5日
今天研究了一下如何实现IE9双击关闭当前标签页(Tab选项卡页面)的功能,实现这个功能的基本原理如下:
1、建立全局鼠标钩子,获取双击选项卡时候的消息,触发选项卡被双击的事件。
2、发送Ctrl+W键盘消息,触发快捷键功能关闭当前选项卡页面。
这里有几个问题需要解决:
- 如何获取鼠标双击事件:
通过spy++检测后发现,发现Tab栏是一个类型为DirectUIHWND的类,它是一个TabControl,本身并不支持鼠标双击消息,因此,需要自己根据MouseUP消息判断是否为双击消息(通过两次MouseUp的时间间隔来判断)。 - 如何判断是否双击的标签页:
由于创建的是全局钩子,所有的鼠标消息都会被截取到,因此这里要进行过滤。具体的条件为:鼠标触发点的控件类为DirectUIHWND,并且其进程为IE。 - 如何关闭当前标签页:
这个比较简单,直接调用keybd_event发送Ctrl+W即可。
实现这个功能并不困难,但我想把它集成到BHO中时,却遇到了一个问题——当IE开启了保护模式时,是无法收到全局鼠标钩子的消息的。
解决这个问题的方法有两种:
- 关闭保护模式
- 新写一个Hook程序实现鼠标消息的截取,然后在BHO中启动该进程。
方法1的方法降低了浏览器的安全性,自然不可取。方法2虽然可以解决这个问题,但是却多了一个附加进程,虽然可以把它隐藏起来,用户感知不到,但始终不大爽。权衡再三,最终还是选择了方法2。(我对windows编程不熟,如果有更好的方法请告知)
以上都是介绍实现该功能的技术原理,下面便是最终实现的方法,感兴趣的朋友可以自己下载试一下:
使用环境:Win 7+IE9+.net 4.0,其它环境无法执行。Win 7用户需安装.net 4.0后才能启动该程序。
使用方法:
打开IE9之后在手动启动该程序即可,启动后它便自动隐藏在后台(通过进程管理器可以查看到该程序,就不要不停的点了),然后就有了双击IE9标签页按钮关闭当前选项卡页面的功能了。当IE9关闭后,该程序也会自动关闭。
再介绍一个快速关闭选项卡的方法:在选项卡(标签)中点击鼠标中间的滚轮键,便可以关闭选项卡。小编感觉这个方法要比双击关闭的方法更快速吧。
via:TianFang
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
文章引用地址:http://www.iefans.net/ie9-shuangji-guanbi-biaoqianye-xuanxiangka/ 作者:iefans
文章引用地址:http://www.iefans.net/ie9-shuangji-guanbi-biaoqianye-xuanxiangka/ 作者:iefans

没懂
更想有拖拽功能…
给作者一个建议:建议增加一个开机启动的守护进程,这个进程用于监视是否存在IE进程,如果存在IE进程而不存在mousehook进程,则启动mousehook进程,若两个进程都存在则无任何动作。这样就避免了手动运行mousehook的麻烦,只是不知道这样做会不会很占用资源。
不知道作者是否能搞个其他语言的版本?因为很多人不想为了一个小程序而去下载几十M的.Net Framwork4.
拖拽可以试试这个
http://code.google.com/p/cs-drag4ie9/
得不偿失。。全局钩子会拖慢系统速度,而且占去了无谓的内存
非常希望作者能给个打开IE9同步加载此软件的方法…每次手动开始这个软件实在是不习惯~