2

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

2 回答 2

3

从 AutoHotkey 手册:

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

这就是诀窍:

$LButton:: Trap
于 2012-02-25T06:28:42.073 回答
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()
于 2012-02-25T02:23:44.670 回答