【问题标题】:How to remap a double click button in autohotkey如何在自动热键中重新映射双击按钮
【发布时间】:2013-12-30 08:01:30
【问题描述】:

我有一个用作双击的特殊鼠标按钮。它没有任何特殊的按键,它只是发送两个 LButton 信号。

我在脚本中引入了#InstallMouseHook,以便能够跟踪鼠标点击。多次按下双键后我得到了这个:

VK  SC  Type    Up/Dn   Elapsed Key     
---------------------------------------------------------------------------------------     
04  000     d   2.78    MButton         
04  000     u   0.19    MButton         
01  000     d   0.65    LButton         <- Manual DC     
01  000     u   0.17    LButton         
01  000     d   0.11    LButton         
01  000     u   0.14    LButton         
04  000     d   0.75    MButton         
04  000     u   0.19    MButton         
01  000     d   0.45    LButton         <- Special button DC            
01  000     u   0.00    LButton         
01  000     d   0.00    LButton         
01  000     u   0.00    LButton    

根据我的假设,经过的键是确定什么是 DC 鼠标按钮的双击 (DC) 以及我手动按下左键两次的关键。我想重新映射前一个场景,而不是后者(DC 按钮:: 其他类似中键和我的手动双击左键保持不变)。到目前为止,DC按钮的经过时间似乎是2.0。

我们的想法是有这样的东西(不是 AHK 语言):

loop 
 if (LButton == 1) //pressed
    {
    t=StartElapseTimer;
    if (t<2 && LButton == 1) //how to check it went down and up before down the 2nd time?
       LButton::MButton; //the remapping I want
    else // t>2
       Nothing //let me do a regular DC
    }
end

您能帮我了解如何启动计时器以及需要设置哪些环境变量吗?

谢谢。

【问题讨论】:

  • 我很难理解您的实际要求。您有某种特殊的鼠标按钮会产生双击并且您想重新映射此按钮,这是否正确?如果是的话,最好在上面的键盘记录中列出这些“特殊双击”,这样就可以将它们与正常(双击)单击区分开来。
  • 是的,这正是我想要做的。在我的问题中添加了一个介绍段落。
  • 这些记录的点击都是由特殊按钮产生的?
  • 在键盘记录中澄清(除最后一个外,均来自特殊按钮)

标签: keyboard autohotkey remap


【解决方案1】:

每次点击时,您必须检查自上次点击后经过的时间,并决定如何处理信息:

dcTime := 50

LButton::
    if(A_PriorHotkey = A_ThisHotkey && A_TimeSincePriorHotkey < dcTime) {
        Send, {MButton}
    } else {
        Send, {LButton}
    }
return

当然,您必须根据鼠标按钮的速度调整超时。我还建议致电SetBatchLines, -1,因为它可以最大限度地减少时间测量的不准确性。

【讨论】:

  • 我很难用 DC 按钮使这个按钮工作(常规的鼠标左键双击工作完美)。 DC 按钮永远不会触发第一个 if 条件 - 除非我按下左键单击然后 DC 按钮 -。我将您的 Send MButton 行更改为 'MsgBox % A_TimeSincePriorHotkey' 以验证延迟。有任何想法吗?我认为这与 DC 按钮与手动 DC 的零延迟有关。我更新了初始键盘记录以澄清这一点:对于 DC 按钮,第一次按下 LButton 和第二次按下之间有 0.00 的延迟。
  • @JonesR 尝试在调用 LButton 时仅输出 A_TimeSincePriorHotkey(无条件)。
  • 我放弃了。您的建议有助于确定手动或使用按钮双击时的延迟。问题是它们在同一范围内,即使这样 DC 按钮也从未触发脚本。最后将我的右键重新映射到 MButton(我最初的意图是仅在 chrome/firefox 中使用它来打开链接,而不是 Control+Click 或 MButton)。您的解决方案非常接近。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2020-09-27
  • 2020-08-17
  • 1970-01-01
  • 2011-03-13
  • 2014-02-25
  • 1970-01-01
相关资源
最近更新 更多