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

问题描述:

我有一个AutoHotkey脚本,其中鼠标左键被映射到一个函数。部分功能包括模拟实际光标位置的左键单击偏移量。毫不奇怪,这最终变成了一个无限循环。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 
+0

看起来有些痛苦的人是出于某种原因报复下投票。 – Synetech 2012-03-29 03:17:17

从AutoHotkey的手册:

$ - 这通常是,如果只需要脚本使用发送命令发送构成热键本身的密钥,否则可能导致它自己触发。

这做的伎俩:

$LButton:: Trap 

其实我没有看到你所描述的循环行为,所以我不知道是否有其他一些因素在作怪。

如果真的有问题,那么你可以使用一个布尔标志,以防止递归执行:

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

嗯,你说得对。我一定是简化了这个例子。它似乎现在正在工作,但我改变的唯一办法是将'y'改为'%y%'(当我将它改回来时,它并不像以前那样怪异)。希望它继续行动直到完成... – Synetech 2012-02-25 02:43:45