2013-07-09 23 views
6

Moje pytanie brzmi, czy istnieje sposób na niezawodne przytrzymanie klawisza na macu za pomocą applescript/python?Czy Python może być użyty do wysłania prawdziwego zdarzenia zamykania klucza do komputera Mac?

Szukam prawie wszędzie takich tematów, jednak żaden z nich nie został przerwany. Próbuję użyć Pythona do odczytu informacji szeregowych z Arduino, a następnie przekazać te sygnały jako naciśnięcia klawiszy. Widziałem, jak korzystać applescript wysłać „klucz”, aby w przypadku systemu, jak pokazano w poniższym kodzie:

(Python code) 
    def SendDown(key): 
    string = str(key) 
    cmd = """osascript -e 'tell application "System Events" to key down (key code """ + string + ")'" 
    os.system(cmd) 

ten kod działa na ogół jednak chcę kontrolować symulator lotu Google. Kiedy próbuję to zrobić, naciśnięcia klawiszy wydają się być sposobem na szybkie i symulator lotu lub podstawowa mapa Ziemi Google porusza ułamkami tego, czego oczekiwałbym.

one sposobem używam tego kodu jest zasadniczo w następujący sposób (suedocode)

if (ArduinoMessage == "left"): 
    SendDown(leftKey) #leftKey has been set to 123 -- the code for the left arrow key 
    etc... 

Z mojego punktu widzenia, kluczowym wydarzeniem w dół wyślę to przede wszystkim szybkie klawiszy i klucz nie jest przytrzymany. Spróbowałem zaprogramować kluczowe wydarzenie bezpośrednio w applescript i odniosłem niewielki sukces. Mój kod wyglądał mniej więcej tak:

tell application "System Events" 
    repeat 50 times  
     key down (key code 123) 
    end repeat 
    key up (key code 123) 
end tell 

Ten kod przesunięciu mapy google earth więcej niż ja dostaję, ale zajęło dużo czasu, aby dostać to, aby przenieść małe kwoty (znacznie mniej niż zwykłych klawiszy strzałek). Potem próbowałem napisać ten skrypt do Pythona i straciłem wszelką poprawę.

Powtórzę więc pytanie - czy istnieje sposób na niezawodne przytrzymanie klawisza na macu za pomocą applescript/python?

Byłem w stanie dość łatwo uruchomić to na Windowsie, jednak mogłem użyć biblioteki tylko dla Windows o nazwie SendKeys, która jest zaprojektowana dla takich aplikacji.

Każda pomoc zostanie doceniona.

Dzięki,

Jake

+0

Świetne nazwisko w mojej opinii. –

Odpowiedz

2

Zastosowanie PyUserInput. Spróbuj użyć następującego kodu.

import time 

import pykeyboard 


# TODO: Replace following two lines with the code that activate the application. 
print('Activate the application 3 seconds.') 
time.sleep(3) 

k = pykeyboard.PyKeyboard() 
k.press_key(k.left_key) 
time.sleep(1) # Hold down left key for 1 second. 
k.release_key(k.left_key) 

Niestety nie mam komputera Mac. Testowałem w systemie Linux, Windows.

+1

Dobra sugestia falsetru, okazuje się, że nie działa na komputerze Mac. Najwyraźniej pykeyboard to tylko Windows i Linux. (Patrz [tutaj] (https://pypi.python.org/pypi/PyUserInput/0.1)) Jednakże udało mi się uzyskać od nich sugestię - [autopy] (http://msanders.github.io/ autopy /), które mogą działać na Macu. Więc twoja sugestia nie jest na próżno. Dziękuję Ci. – Jake

+1

Szukałem autopopulacji i wielu ludzi nie może go zainstalować na Macu, a także xcode jest wymagany do pobrania. Chciałbym, aby moja aplikacja była szybką instalacją - ponieważ kod xcode to prawie 2 GB, nie wydaje się to zbyt przydatne. Mam nadzieję, że istnieje inna metoda. – Jake

+0

@Jake, Jak o użyciu PyMouse (który jest zawarty w PyUserInput). Używanie PyMouse będzie wymagać pewnych obliczeń, ale nie będzie potrzeby spania. – falsetru