[教程][初级]双击事件的判断

AutoHotKey(以下简称AHK)中,和其它多数编程语言不同,并未实现对双击事件的判断。因此,为了实现对双击事件的判断,需要由我们自己编写脚本来实现此功能。


1.解决思路

为了判断双击(三击或者更多也是可以的)事件,以鼠标右键为例,我们可以在第一次按下鼠标右键后,判断此后的一段时间(例如,400ms),用户是否第二次按下了鼠标右键。如果用户没有第二次按下鼠标右键,则将其视为第一类行为,如果用户有按下第二次按键,则将其视为第二类行为;以此类推。流程图如下:

[教程][初级]双击事件的判断-AutoAHK


2.简单实现

根据如上思路,编写如下代码:

; 用于统计按键次数

gnPressCount := 0

$RButton::

{

        gnPressCount += 1

        if gnPressCount = 1

                SetTimer, ProcSubroutine, 400

        Return

}

ProcSubroutine:

{

        ; 在计时器事件触发时,需要将其关掉

        SetTimer, ProcSubroutine, Off

        If gnPressCount = 1

        {

                ; 第一类行为

                ; 在此处,我将其设为和通常的鼠标右键一样的功能,也即打开上下文菜单

                Send {AppsKey}

        }Else If gnPressCount = 2

        {

                ; 第二类行为

                MsgBox, 触发双击鼠标右键事件

        }Else

        {

                MsgBox, 触发三击鼠标右键事件

        }

        ; 在结束后,还需要将鼠标右键的按键次数置为0,以方便下次使用

        gnPressCount := 0

        Return

}

 


3.优化方案

 

优化一、将一定时间内的按键次数改为在一定时间内不在按此按键才触发

但是呢,上面的代码还是有一些不足的。

譬如,我们如果想要判断更多次的按键事件(虽然一般人不会这么做,再见!),那么,400ms的限制就使得这个情况变得不太友好了。

于是做出如下改进。

#SingleInstance Force
; 用于统计按键次数
gnPressCount := 0
$RButton::
{
        gnPressCount += 1
        SetTimer, ProcSubroutine, Off
        SetTimer, ProcSubroutine, 300
        Return
}
ProcSubroutine:
{
        ; 在计时器事件触发时,需要将其关掉
        SetTimer, ProcSubroutine, Off
        If gnPressCount = 1
        {
                ; 第一类行为
                MsgBox, 触发单击鼠标右键事件
        }Else If gnPressCount = 2
        {
                ; 第二类行为
                MsgBox, 触发双击鼠标右键事件
        }Else
        {
                MsgBox, 触发三击鼠标右键事件
        }
        ; 在结束后,还需要将鼠标右键的按键次数置为0,以方便下次使用
        gnPressCount := 0
        Return
}

 

最后修改: 2020-10-22 01:50

人已赞赏
AHKV1

[字符串]九九乘法表

2017-12-5 20:25:28

AHKV1

IP地址生成

2017-12-8 16:08:25

3 条回复 A文章作者 M管理员
  1. 学习

  2. 之前有个专题专门探讨过吧!

个人中心
今日签到
有新私信 私信列表
搜索