zoukankan      html  css  js  c++  java
  • 实现双击IE9的Tab键关闭当前页面的功能

    今天研究了一下如何实现双击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关闭后,改程序自动关闭。该程序没有混淆,需要代码就自己反编译好了,就不要留言了。


     

  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/TianFang/p/2005927.html
Copyright © 2011-2022 走看看