2013-12-12 94 views
0

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

我已将#InstallMouseHook引入我的脚本中,以便能够跟踪鼠标点击。我认为经过的关键的关键是确定什么是双击(DC)由DC鼠标按钮和由我一个手动按下

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按钮的使用时间似乎是< 2.0,手动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 

你能帮我如何启动定时器和需要设置什么环境变量?

谢谢。

+0

我很难把握你实际要求的东西。是否有正确的,你有某种特殊的鼠标按钮,产生双击,你想重新映射此按钮?如果是的话,如果你在上面的键盘上列出了这些“特殊的双击”,这将是非常棒的,所以除了正常的(双击)点击之外,它们可以被告知。 – MCL

+0

是的,那正是我想要做的。在我的问题中添加了一段介绍。 – JonesR

+0

这些记录的点击都是由特殊按钮生成的? – MCL

回答

0

在每一次点击,你必须检查所经过的时间以来的最后一次点击,并决定如何处理信息:

dcTime := 50 

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

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

+0

我很难使这个工作与DC按钮(常规鼠标左键双击完全符合这一点)。直流按钮不会触发第一个条件,如果无条件按左键,然后按下DC按钮。我将您的发送MButton行更改为'MsgBox%A_TimeSincePriorHotkey'以验证延迟。有任何想法吗?我认为它与DC按钮和手动DC中的零延迟有关。我更新了最初的键盘记录以澄清这一点:对于DC按钮,在第一次LButton按压和第二次按压之间有0.00延时。 – JonesR

+0

@JonesR当调用LButton时,尝试输出'A_TimeSincePriorHotkey'(无条件)。 – MCL

+0

我放弃了。您的建议有助于确定手动或按钮双击时的延迟时间。问题是它们处于相同的范围内,即使这样,DC按钮也不会触发脚本。结束我的右按钮重新映射到MButton(我最初的目的是仅在Chrome/Firefox中使用它打开链接而不是Control + Click或MButton)。 您的解决方案尽可能地接近。谢谢。 – JonesR