Может ли AppleScript автоматически нажимать для меня клавишу в приложении?

Я пытаюсь использовать AppleScript, который будет автоматически нажимать клавишу со стрелкой вправо в течение 1 секунды, затем клавишу со стрелкой влево в течение 1 секунды и повторять это в бесконечном цикле, пока я не прерву его.

Вот что я придумал до сих пор, но это не совсем работает:

tell application "VisualBoyAdvance"
    repeat 100 times
        tell application "VisualBoyAdvance" to keystroke "124"
        delay 1
    end repeat     
end tell 
Можете ли вы добавить пример кода того, что вы уже пробовали? Вы узнаете больше от того, кто даст отзыв о вашем сценарии, чем просто скопируете его.
Интересный запрос. Для чего тебе это ?
@Buscar웃 Думаю, ему это нужно, чтобы автоматически вылупить яйцо покемона...! Я наткнулся на этот вопрос в стремлении сделать то же самое...

Ответы (2)

Вы можете повторять команды кода клавиши до тех пор, пока не изменится самое переднее приложение:

delay 1
activate application "TextEdit"
tell application "System Events"
    repeat while (path to frontmost application) is (path to application "TextEdit")
        repeat 3 times
            key code 123
            delay 0.3
        end repeat
        repeat 3 times
            key code 124
            delay 0.3
        end repeat
    end repeat
end tell

Более короткие задержки (в том числе 0,2 секунды) затрудняли остановку скрипта. Мне пришлось удерживать ⌥⇧⌘⎋, чтобы принудительно закрыть TextEdit.

Это переехало влево только один раз:

delay 1
tell application "System Events"
    key down (character id 28)
    delay 5
    key up (character id 28)
end tell
  • слева: 123 / 28
  • справа: 124/29
  • вниз: 125 / 31
  • вверх: 126 / 30

Я только что провел несколько тестов: AppleScript не очень подходит для того, что вы просите, поскольку он однопоточный. Поэтому выход из цикла в такой ситуации не представляется возможным.

Вот код, который делает то, что вы хотите, но без выхода из цикла.

tell application "VisualBoyAdvance" to activate
repeat while true
    set mydate to current date
    repeat while ((current date) - mydate < 1)
        tell application "System Events" to keystroke (key code 124) -- right
    end repeat
    repeat while ((current date) - mydate < 1)
        tell application "System Events" to keystroke (key code 123) -- left
    end repeat
end repeat

Если вы запустите его, он заморозит компьютер, отправив много событий.