Autohotkey:发送鼠标单击(或按键)而不触发处理程序

时间:2012-02-25 01:20:50

标签: handler infinite-loop autohotkey remap

我有一个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

2 个答案:

答案 0 :(得分:3)

从AutoHotkey手册:

  

$ - 这通常仅在脚本使用“发送”命令发送组成热键本身的键时才需要,否则可能会导致其自行触发。

这就是诀窍:

$LButton:: Trap

答案 1 :(得分:0)

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

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

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()