实现双击IE9的Tab键关闭当前页面的功能
今天研究了一下如何实现双击IE9的Tab键关闭当前页面的功能,实现这个功能的基本原理如下:
- 建立全局鼠标钩子,获取双击Tab时候的消息,触发Tab被双击的事件。
- 发送Ctrl+W键盘消息,触发快捷键功能关闭当前Tab页。
这里有几个问题需要解决:
- 如何获取鼠标双击事件:
通过spy++检测后发现,发现Tab栏是一个类型为DirectUIHWND的类,它是一个TabControl,本身并不支持鼠标双击消息,因此,需要自己根据MouseUP消息判断是否为双击消息(通过两次MouseUp的时间间隔来判断)。 - 如何判断是否双击的Tab栏:
由于创建的是全局钩子,所有的鼠标消息都会被截取到,因此这里要进行过滤。具体的条件为:鼠标触发点的控件类为DirectUIHWND,并且其进程为IE。 - 如何关闭当前Tab页:
这个比较简单,直接调用keybd_event发送Ctrl+W即可。
实现这个功能并不困难,但我想把它集成到BHO中时,却遇到了一个问题——当IE开启了保护模式时,是无法收到全局鼠标钩子的消息的。
解决这个问题的方法有两种:
- 关闭保护模式
- 新写一个Hook程序实现鼠标消息的截取,然后在BHO中启动该进程。
方法1的方法降低了浏览器的安全性,自然不可取。方法2虽然可以解决这个问题,但是却多了一个附加进程,虽然可以把它隐藏起来,用户感知不到,但始终不大爽。权衡再三,最终还是选择了方法2。(我对windows编程不熟,如果有更好的方法请告知)
这里是我的一个实现,感兴趣的朋友可以自己下载试一下: 点击下载 使用环境是win7+ie9+.net4.0,其它环境无法执行。
由于没有和BHO集成,需要手动启动,启动后它自动隐藏在后台(通过进程管理器可以看,就不要不停的点了),然后就有了双击IE9的Tab键关闭当前页面的功能了。当IE9关闭后,改程序自动关闭。该程序没有混淆,需要代码就自己反编译好了,就不要留言了。
实现双击IE9的Tab键关闭当前页面的功能相关推荐
- js能关闭HTML页面,js关闭当前页面的方法是什么_js如何只关闭当前页面图文步骤...
最近有朋友向小编咨询js关闭当前页面的方法是什么,其实对于这个问题,还有很多朋友不明白,js到底应该如何操作才能关闭当前页面呢?别着急,小编这就为大家带来js如何只关闭当前页面图文步骤. js如何只关 ...
- Ubuntu 下无法Tab键自动补全功能解决办法
在Ubuntu下 使用Tab键报错:cannot create temp file for here-document: no space left on device 解决: rm -rf /var ...
- python tab键自动补全怎么用_python添加tab键自动补全功能
默认python是没有tab键补全功能的: >>> import tab Traceback (most recent call last): File "", ...
- Android Studio设置关闭当前页面的快捷键ctrl+w
Android Studio设置关闭当前标签页面的快捷键 左上角File-选择Settings- 弹出框输入Keymap-右边依次找到Main Menu-Window-Editor Tabs-Clos ...
- H5界面关闭当前页面的方法
H5界面关闭当前页面 由于window.close方法只使用于IE浏览器,所以我根据userAgent判断客户端类型编写关闭方法,代码如下: function shutdown() {if(confi ...
- 火狐下实现关闭当前页面的方法(当然其他浏览器也适用)
首页为什么突出火狐浏览器呢?因为火狐默认情况下是不能关闭窗口的,有一个情况是这个窗口时通过window.open打开的. 但是今天这个实践是来自共同做消保协议阅读的开发给我说的.具体的实现是: < ...
- 远程桌面中Tab键不能补全的解决办法
我们曾在之前的一篇文章中介绍了windows远程连接ubuntu的方法,在成功登陆远程桌面环境之后,发现在终端中Tab键不能自动补齐(但是Ctrl +Tab 可以用,但是需要按下组合键才能补全的话,时 ...
- linux远程桌面键盘无法输入,windows远程桌面ubuntu中Tab键不能补全命令的解决办法...
windows远程桌面ubuntu中Tab键不能补全命令的解决办法 前置 window可以远程ubuntu的前提 参考百度经验即可实现:windows远程桌面ubuntu 正文 在成功登陆远程桌面环境 ...
- ubuntu 设置tab键自动补全
Unbuntu 安装之后就在终端中使用Tab键不能自动补全,解决办法如下: 1.利用vi编辑器打开/etc/bash.bashrc文件(需要root权限) sudo vi /etc/bash.bash ...
最新文章
- 比特币现金矿工商议,为开发提供部分奖励
- kali linux 内核,关于kali编译安装内核和多内核保留的问题求解答。
- IT英语6-Java常用英语词汇总结
- 完成users中的models
- unlegal android,百度地图定位 Cordova 插件 cordova-plugin-baidumaplocation
- 如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)
- 外链引入css有哪些方式_快速收录的外链操作技巧
- 按英语体育计算机创建透视表,数据透视表和数据透视图概述
- HttpwebRequest - 带ViewState的网页POST请求
- iPhone4S安装Linux系统,别失望太早 iPhone 4S其实就是iPhone 5
- java给mongo数组添加_如何使用具有新值的java在mongodb中的现有集合中追加现有数组...
- 三点定位法原理及实现——蓝牙定位
- 橡胶材料特性和本构关系【转】_51CAE_新浪博客
- [NXP.iMX6UL] NFS服务器
- java登陆注册 mysql_Java+mysql用户注册登录功能
- sv 数据类型: packed /unpacked/动态数组/联合数组/struct/ enum
- 如何用C#制作 微信个人机器人
- 优链时代荣获“2022 数字技术应用创新奖”|2022世界数字经济大会
- 学习笔记:min-width和min-height
- 世界上第一家咨询公司的发展历史
热门文章
- python中的数据写入与添加数据写入文件(to_csv)
- Spring Boot 小技巧
- JMeter 将上一个请求的结果作为下一个请求的参数——使用正则提取器(转载)...
- 使用Qt开发中国象棋(一):概述
- 2-2 LU crout 分解
- Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
- log4j用于读取.xml文件的出现了错误,类加载器.getResource(user.xml).getPath()返回路径空格变成了%20...
- windows server 2003断开远程之后自动注销用户
- 《The Elements of User Experience》读书笔记
- Django 1.11 bootstrap样式文件无法加载问题解决