0

我运行一个应用程序,该应用程序在 LButton 之后太快删除了一个 RButton。解决方案可能是运行类似

~LButton::                    ; pass through, set A_PriorHotkey
return

#If A_PriorHotkey = LButton && A_TimeSincePriorHotkey < minDelay
RButton:: 

但是我在编写最后一行和以下行时没有运气,因此如果#IF 为假或延迟约100ms,则发送正常的MButton down 和RButton up 如果#IF 为true,则发送RButton down 和RButton up .

提前致谢。

4

2 回答 2

1

这是一个应该可以工作的解决方案,我对其进行了一些测试,它应该 100% 的时间都可以工作。如果您使用它,请不要只是复制和粘贴,而是要尝试了解代码的作用。

基本上我们所做的是左键单击我们计时直到达到某个时间(在这种情况下为 1000 毫秒 -> IGNORE_TIME),同时我们忽略右键单击,当时间到时右键单击再次处于活动状态。

global IGNORE_TIME := 1000  ; ignore for 1000 miliseconds, change only this if you wan't different times
global starttime := 0


~LButton::
    SetTimer, DelayRButton_r ,Off
    starttime := 25
    SetTimer, DelayRButton_r ,25
    tooltip,leftbutton    ; debug
return


RButton::
    if(starttime > 0)    ; if the left button was pressed IGNORE_TIME ago or less ignore right click
        return
    Send, {RButton}    ; else send right click
    tooltip,rightbutton    ; debug
return


DelayRButton_r:    ; this function runs every 25 ms until it reaches IGNORE_TIME then if sets starttime to 0 and rightclick works again
    starttime += 25
    if( starttime > IGNORE_TIME)
    {
        SetTimer,DelayRButton_r, Off
        starttime := 0
    }
return

另请记住,此代码可以轻松编辑为仅适用于特定应用程序/窗口。

于 2013-03-04T19:06:39.327 回答
0

根据您的描述,我假设您无法更改发送应用程序(即不是 AutoHotKey 脚本,但可能是编译后的 ahk.exe)

一旦您能够使用以下命令触发 AutoHotKey:

RButton::
    SoundBeep, 500,500
Return  

你可以试试这段代码:

SetTitleMatchMode = 2

#IfWinActive, Name of your Application
    $RButton::
       if (A_PriorHotkey = "LButton" AND A_TimeSincePriorHotkey < 400)
          Sleep, 1000
       Click, Right
    Return
#IfWinActive

您可以通过右键单击 AutoHotKey 图标,然后启动 Windows Spy 找到(发送或接收应用程序,取决于当时哪个应用程序处于活动状态)的名称。激活 Windows Spy 后,单击应用程序并查看应用程序的标题(或 ahk_class)。

警告我没有测试过这段代码!

于 2013-03-04T06:28:02.290 回答