此单击、双击并按住 AHK 脚本不起作用

此单击、双击并按住 AHK 脚本不起作用

我从中找到了这个脚本https://autohotkey.com/boards/viewtopic.php?f=5&t=51596它运行完美。我喜欢它易于理解,并且可以轻松更改所需的密钥。

事情是:

  1. 第一次运行时,它会触发“a”,无需我按任何键

  2. 我想用这种方法设置其他键,但它只适用于第一个键分配。我复制了工作脚本,并尝试修改变量名称以免互相干扰,并将其粘贴在最底部的“返回”下方,但我在下面添加的任何东西都KeyWait, {%Key%} tapCount = Return不起作用

这是当前修改的部分工作脚本,我这里缺少什么

Key = a ;Main Keybind
tLength = -300 ;Time before key is pressed
tapSingle = a ;Single Tap Keybind
tapDouble = b ;Double Tap Keybind
tapHold = c ;Hold Keybind
;----------------------------------------------------------
Hotkey, $%Key%, startTimer
startTimer:
If !endTimer
SetTimer, endTimer, %tLength%
tapCount++
Return
endTimer:
If GetKeyState(Key, "P") and tapCount < 2
Send, {%tapHold%}
Else If tapCount = 2
Send, {%tapDouble%}
Else If tapCount = 1
Send, {%tapSingle%}
KeyWait, {%Key%}
tapCount =
Return

==ANYTHING BELOW IS NOT WORKING==

bKey = b ;Main Keybind
btLength = -300 ;Time before key is pressed
btapSingle = w ;Single Tap Keybind
btapDouble = a ;Double Tap Keybind
btapHold = s ;Hold Keybind
;----------------------------------------------------------
Hotkey, $%bKey%, bstartTimer
bstartTimer:
If !bendTimer
SetTimer, bendTimer, %btLength%
btapCount++
Return
bendTimer:
If GetKeyState(bKey, "P") and btapCount < 2
Send, {%btapHold%}
Else If btapCount = 2
Send, {%btapDouble%}
Else If btapCount = 1
Send, {%btapSingle%}
KeyWait, {%bKey%}
btapCount =
Return

答案1

有一些语法问题(例如,tapCount =倒数第二行)。我重写了脚本,将其更新为AutoHotkey v2并使用一个函数,以便可以绑定多个组合键,而无需复制和粘贴行。

TripleBind(mainKey, msec, singleKey, doubleKey, holdKey)
{
  ProcessPress(key)
  {
    static count := 0
    held := true
    ++count
    AfterTime()
    {
      if (held) {
        Send holdKey
      } else if (count == 1) {
        Send singleKey
      } else {
        Send doubleKey
      }
      count := 0
    }

    if (count == 1) {
      SetTimer AfterTime, -1 * msec
      KeyWait mainKey
      held := false
    }
  }

  Hotkey "$" . mainKey, ProcessPress
}

TripleBind("a", 300, "a", "b", "c")
TripleBind("b", 300, "w", "a", "s")

为了更容易地从搜索引擎找到这个更新的脚本,这里引用了链接中的原始问题:

我已经尝试这样做了一个小时左右,但并没有取得任何进展。

本质上,我有一把钥匙。为了便于论述,我们假设它是

当点击 a 时,我希望它等待 300 毫秒,然后按下 a。当点击 a 并在 300 毫秒内再次点击时,我希望它在第一次点击后 300 毫秒按下 b。当按住 a 300 毫秒时,我希望它按一次 c。

这意味着 300 毫秒后总会发送一个字符,并且根据按钮是被按下一次、两次还是按住该时间来确定输出的键。

该脚本的实际用例是,根据我按下单键脚踏板的方式为其提供多重绑定。

如果有人能就此事给我任何建议,我将不胜感激。

相关内容