今天研究了一下如何实现双击IE9的Tab键关闭当前页面的功能,实现这个功能的基本原理如下:

  1. 建立全局鼠标钩子,获取双击Tab时候的消息,触发Tab被双击的事件。
  2. 发送Ctrl+W键盘消息,触发快捷键功能关闭当前Tab页。

这里有几个问题需要解决:

  1. 如何获取鼠标双击事件:
    通过spy++检测后发现,发现Tab栏是一个类型为DirectUIHWND的类,它是一个TabControl,本身并不支持鼠标双击消息,因此,需要自己根据MouseUP消息判断是否为双击消息(通过两次MouseUp的时间间隔来判断)。
  2. 如何判断是否双击的Tab栏:
    由于创建的是全局钩子,所有的鼠标消息都会被截取到,因此这里要进行过滤。具体的条件为:鼠标触发点的控件类为DirectUIHWND,并且其进程为IE。
  3. 如何关闭当前Tab页:
    这个比较简单,直接调用keybd_event发送Ctrl+W即可。

实现这个功能并不困难,但我想把它集成到BHO中时,却遇到了一个问题——当IE开启了保护模式时,是无法收到全局鼠标钩子的消息的。

解决这个问题的方法有两种:

  1. 关闭保护模式
  2. 新写一个Hook程序实现鼠标消息的截取,然后在BHO中启动该进程。

方法1的方法降低了浏览器的安全性,自然不可取。方法2虽然可以解决这个问题,但是却多了一个附加进程,虽然可以把它隐藏起来,用户感知不到,但始终不大爽。权衡再三,最终还是选择了方法2。(我对windows编程不熟,如果有更好的方法请告知)

这里是我的一个实现,感兴趣的朋友可以自己下载试一下: 点击下载   使用环境是win7+ie9+.net4.0,其它环境无法执行。

由于没有和BHO集成,需要手动启动,启动后它自动隐藏在后台(通过进程管理器可以看,就不要不停的点了),然后就有了双击IE9的Tab键关闭当前页面的功能了。当IE9关闭后,改程序自动关闭。该程序没有混淆,需要代码就自己反编译好了,就不要留言了。

实现双击IE9的Tab键关闭当前页面的功能相关推荐

  1. js能关闭HTML页面,js关闭当前页面的方法是什么_js如何只关闭当前页面图文步骤...

    最近有朋友向小编咨询js关闭当前页面的方法是什么,其实对于这个问题,还有很多朋友不明白,js到底应该如何操作才能关闭当前页面呢?别着急,小编这就为大家带来js如何只关闭当前页面图文步骤. js如何只关 ...

  2. Ubuntu 下无法Tab键自动补全功能解决办法

    在Ubuntu下 使用Tab键报错:cannot create temp file for here-document: no space left on device 解决: rm -rf /var ...

  3. python tab键自动补全怎么用_python添加tab键自动补全功能

    默认python是没有tab键补全功能的: >>> import tab Traceback (most recent call last): File "", ...

  4. Android Studio设置关闭当前页面的快捷键ctrl+w

    Android Studio设置关闭当前标签页面的快捷键 左上角File-选择Settings- 弹出框输入Keymap-右边依次找到Main Menu-Window-Editor Tabs-Clos ...

  5. H5界面关闭当前页面的方法

    H5界面关闭当前页面 由于window.close方法只使用于IE浏览器,所以我根据userAgent判断客户端类型编写关闭方法,代码如下: function shutdown() {if(confi ...

  6. 火狐下实现关闭当前页面的方法(当然其他浏览器也适用)

    首页为什么突出火狐浏览器呢?因为火狐默认情况下是不能关闭窗口的,有一个情况是这个窗口时通过window.open打开的. 但是今天这个实践是来自共同做消保协议阅读的开发给我说的.具体的实现是: < ...

  7. 远程桌面中Tab键不能补全的解决办法

    我们曾在之前的一篇文章中介绍了windows远程连接ubuntu的方法,在成功登陆远程桌面环境之后,发现在终端中Tab键不能自动补齐(但是Ctrl +Tab 可以用,但是需要按下组合键才能补全的话,时 ...

  8. linux远程桌面键盘无法输入,windows远程桌面ubuntu中Tab键不能补全命令的解决办法...

    windows远程桌面ubuntu中Tab键不能补全命令的解决办法 前置 window可以远程ubuntu的前提 参考百度经验即可实现:windows远程桌面ubuntu 正文 在成功登陆远程桌面环境 ...

  9. ubuntu 设置tab键自动补全

    Unbuntu 安装之后就在终端中使用Tab键不能自动补全,解决办法如下: 1.利用vi编辑器打开/etc/bash.bashrc文件(需要root权限) sudo vi /etc/bash.bash ...

最新文章

  1. 比特币现金矿工商议,为开发提供部分奖励
  2. kali linux 内核,关于kali编译安装内核和多内核保留的问题求解答。
  3. IT英语6-Java常用英语词汇总结
  4. 完成users中的models
  5. unlegal android,百度地图定位 Cordova 插件 cordova-plugin-baidumaplocation
  6. 如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)
  7. 外链引入css有哪些方式_快速收录的外链操作技巧
  8. 按英语体育计算机创建透视表,数据透视表和数据透视图概述
  9. HttpwebRequest - 带ViewState的网页POST请求
  10. iPhone4S安装Linux系统,别失望太早 iPhone 4S其实就是iPhone 5
  11. java给mongo数组添加_如何使用具有新值的java在mongodb中的现有集合中追加现有数组...
  12. 三点定位法原理及实现——蓝牙定位
  13. 橡胶材料特性和本构关系【转】_51CAE_新浪博客
  14. [NXP.iMX6UL] NFS服务器
  15. java登陆注册 mysql_Java+mysql用户注册登录功能
  16. sv 数据类型: packed /unpacked/动态数组/联合数组/struct/ enum
  17. 如何用C#制作 微信个人机器人
  18. 优链时代荣获“2022 数字技术应用创新奖”|2022世界数字经济大会
  19. 学习笔记:min-width和min-height
  20. 世界上第一家咨询公司的发展历史

热门文章

  1. python中的数据写入与添加数据写入文件(to_csv)
  2. Spring Boot 小技巧
  3. JMeter 将上一个请求的结果作为下一个请求的参数——使用正则提取器(转载)...
  4. 使用Qt开发中国象棋(一):概述
  5. 2-2 LU crout 分解
  6. Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
  7. log4j用于读取.xml文件的出现了错误,类加载器.getResource(user.xml).getPath()返回路径空格变成了%20...
  8. windows server 2003断开远程之后自动注销用户
  9. 《The Elements of User Experience》读书笔记
  10. Django 1.11 bootstrap样式文件无法加载问题解决