不同发布时间的不同动作

Different actions at different release times

所以我得到了这段代码,它几乎可以正常工作。如果你能帮助我,它可能是一个很好的起点。:

*LButton::
    Send A
KeyWait, LButton, T1
If ErrorLevel
    Send C
Else
    Send B
KeyWait, LButton
Return

代码的作用是定义释放操作,在我松开 LMB(鼠标左键)之后以及何时。

如果我在 1 秒内释放 LMB,它将发送 A B。如果我在 1 秒后释放它,它应该发送 A C,但在我释放 LMB 之后它不会发送。它会在 1 秒过去后立即发送 C。我想在我释放 LMB 后发送 C

如果 LMB 在 1 秒后被释放,那么我想阻止 LMB x 时间。所以我又打不中了

但是如果在1秒之前发布应该可以正常使用

英语从来都不是我的亮点..:D,希望你能理解。

假设:

  1. 当你说 “如果 LMB 在 1 秒后释放,我想阻止 LMB x 次。所以我不能再击中它”,你的意思是您想要它,以便在阻止期间单击 LMB 不会执行任何操作。
  2. 你想要它,以便只有当第二个动作被触发时(在经过一定时间后发送 'C' 的动作),块才会被激活。这将允许您重复单击鼠标发送 A B,但是您必须等待一秒钟才能发送 A C 之后的任何内容。

然后我提出的解决方案涉及一个切换变量,该变量确定在按下 LMB 时热键是否会执行任何操作。切换变量 switch 在脚本的 A C 部分激活后设置为禁用模式,但在一秒(1000 毫秒)后,变量返回到“启用”状态。 [供参考,当开关为1时,热键启用,但如果为0,则禁用。]

代码:

switch := 0

*LButton::
if(!switch){
    Send A
    KeyWait, LButton, T1
    If ErrorLevel{
        Send C
        gosub, tempBlock
    }
    Else
    Send B
    KeyWait, LButton
    Return
}
else
    return

tempBlock:
switch:=1
SetTimer, reset, -1000
return

reset:
switch:=0
return

如果您不尝试弄乱 KeyWait,这很容易做到。
下面的例子仍然缺少你的“阻塞”的东西。我真的不知道你的意思。
如果有不懂的地方自己加,等你解释清楚了我再补上。

*LButton::
    ClickedAt := A_TickCount
    SendInput, A
return

LButton Up::
    if (A_TickCount - ClickedAt <= 1000)
        SendInput, B
    else
        SendInput, C
return

所以LButton::代表被按下的键。 LButton Up:: 用于释放密钥。
在按下时,我们从 built-in 变量 A_TickCount(docs) 中存储当前系统正常运行时间,在释放键时,我们将当前系统正常运行时间与存储的那个看看过去了多久。

SendInput 也用于代替传统的 Send,因为 SendInput 是推荐的更快、更可靠的发送模式。


奖金,两个班轮(因为为什么不):

*LButton::SendInput, % ("A", ClickedAt := A_TickCount)
LButton Up::SendInput, % (A_TickCount - ClickedAt <= 1000) ? "B" : "C"