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 

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

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ń.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.