Czy AppleScript może automatycznie nacisnąć klawisz w aplikacji?

1

Usiłuję wyposażyć AppleScript, który automatycznie naciska klawisz strzałki w prawo przez 1 sekundę, a następnie klawisz strzałki w lewo przez 1 sekundę i powtarzam to w niekończącej się pętli, aż ją przerwę.

Oto, co do tej pory wymyśliłem, ale to nie działa:

tell application "VisualBoyAdvance"
    repeat 100 times
        tell application "VisualBoyAdvance" to keystroke "124"
        delay 1
    end repeat     
end tell 
piekarnik
źródło
Czy możesz dodać próbkę kodu tego, czego próbowałeś do tej pory? Dowiesz się więcej od kogoś, kto komentuje Twój skrypt, niż tylko od kopiowania od kogoś.
nohillside
Ciekawa prośba. Do czego ci to potrzebne ?
Ruskes
@Buscar 웃 Wydaje mi się, że potrzebuje go do automatycznego wyklucia swojego pokemona ...! Natknąłem się na to pytanie, chcąc zrobić to samo ...
aksh1t

Odpowiedzi:

2

Możesz powtarzać polecenia klawiszy, aż zmieni się aplikacja na pierwszym planie:

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

Krótsze opóźnienia (w tym 0,2 sekundy) utrudniały zatrzymanie skryptu. Musiałem przytrzymać ⌥⇧⌘⎋, aby wymusić wyjście z TextEdit.

Ten ruch przeniósł się tylko raz:

delay 1
tell application "System Events"
    key down (character id 28)
    delay 5
    key up (character id 28)
end tell
  • po lewej: 123/28
  • z prawej: 124/29
  • w dół: 125/31
  • w górę: 126/30
Lri
źródło
1

Właśnie wykonałem kilka testów: AppleScript nie nadaje się do tego, o co pytasz, ponieważ jest on jednowątkowy. Dlatego wyjście z pętli w takiej sytuacji nie wydaje się możliwe.

Oto kod, który robi, co chcesz, ale bez wychodzenia z pętli.

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

Jeśli go uruchomisz, komputer zawiesi się, wysyłając do wielu zdarzeń.

Matthieu Riegler
źródło