【问题标题】:Autohotkey: Send mouse-click (or key-press) without triggering handlerAutohotkey:在不触发处理程序的情况下发送鼠标单击(或按键)
【发布时间】:2012-03-15 11:08:28
【问题描述】:

我有一个 AutoHotkey 脚本,其中鼠标左键映射到一个函数。该功能的一部分包括模拟从实际光标位置的左键单击偏移。毫不奇怪,这最终会变成一个无限循环。

同样,有一个处理程序可以捕获按键并在传递按键之前执行一些数学运算。

有没有办法在不触发点击处理程序的情况下执行点击?同样,有没有办法在不触发按键处理程序的情况下发送按键?


Trap() {
  MouseGetPos, x,y
  ;Perform some math with x and y
  Click %x% %y% left ;oops, this causes Trap to get called again
}

LButton:: Trap

【问题讨论】:

  • 看起来某个心怀怨恨的人出于某种原因正在报复投票。

标签: handler infinite-loop autohotkey remap


【解决方案1】:

我实际上没有看到您描述的循环行为,所以我想知道是否还有其他因素在起作用。

如果这确实是问题所在,那么您可以使用布尔标志来防止递归执行:

isTrapping := false

Trap() {
    global isTrapping

    if isTrapping = true
        return

    isTrapping := true

    MouseGetPos x, y
    ; do some maths with x & y

    Click %x%, %y%

    isTrapping := false
}

LButton::Trap()

【讨论】:

  • 嗯,你是对的。我一定是把这个例子简化得太多了。它现在似乎可以工作了,但我唯一改变的是将 y 更改为 %y% (当我把它改回来时,它并没有像以前那样吓坏了)。希望它在完成之前继续表现......
【解决方案2】:

来自 AutoHotkey 手册:

$ - 这通常只有在脚本使用发送命令发送组成热键本身的键时才需要,否则可能会导致它自己触发。

这就是诀窍:

$LButton:: Trap

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2018-10-21
    相关资源
    最近更新 更多