Autohotkey: отправить щелчок мыши (или нажатие клавиши) без запуска обработчика - PullRequest
2 голосов
/ 25 февраля 2012

У меня есть скрипт 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 ]

3 голосов
/ 25 февраля 2012

Из руководства AutoHotkey:

$ - Обычно это необходимо, только если скрипт использует команду Send для отправки ключей, которые содержат саму горячую клавишу, что в противном случае могло бы вызвать его самопроизвольный запуск.

Что делает трюк:

$LButton:: Trap
0 голосов
/ 25 февраля 2012

На самом деле я не вижу описанного вами поведения зацикливания, поэтому мне интересно, есть ли какой-то другой фактор в игре.

Если это действительно проблема, то вы можете использовать логический флаг для предотвращения рекурсивного выполнения:

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