Próbuję napisać prostą nagrywarkę makr w Pythonie dla OSX - coś, co może przechwycić zdarzenia myszy i klawiszy, gdy skrypt działa w tle i odtwarza je. Mogę użyć autopy dla tego ostatniego, czy istnieje podobna prosta biblioteka dla tego pierwszego?Czy mogę używać języka Python do przechwytywania zdarzeń klawiatury i myszy w systemie OSX?
Odpowiedz
Wydaje się, że nie ma sposobu, aby to zrobić w Pythonie na OSX.
Wiem, że można użyć curses
do przechwytywania kluczowych danych wejściowych, ale nie jestem pewien co do wprowadzenia myszy. Nie tylko to, ale jeśli się nie mylę, jest zawarty w bibliotece standardowej z 2.7.2.
Oto rozwiązanie bez użycia curses
:
http://docs.python.org/faq/library.html#how-do-i-get-a-single-keypress-at-a-time
To pytanie został poproszony jakiś czas z powrotem tutaj - Python cross-platform listening for keypresses?
Można znaleźć kod przykładowy tam pomocne!
Dziś napotkałem kilka rozwiązań tego problemu i doszedłem do wniosku, że powrócę tutaj i podzielę się nimi, aby inni mogli zaoszczędzić czas wyszukiwania.
sprytne rozwiązanie krzyż platforma do symulacji klawiatury i myszy: http://www.autopy.org/
Znalazłem również krótkie ale działania (jak Mountain Lion) przykład jak globalnie zalogować naciśnięcia klawiszy. Jedynym zastrzeżeniem jest to, że musisz używać Python2.6, ponieważ 2.7 nie ma dostępnych modułów objc.
#!/usr/bin/python2.6
"""PyObjC keylogger for Python
by ljos https://github.com/ljos
"""
from Cocoa import *
import time
from Foundation import *
from PyObjCTools import AppHelper
class AppDelegate(NSObject):
def applicationDidFinishLaunching_(self, aNotification):
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, handler)
def handler(event):
NSLog(u"%@", event)
def main():
app = NSApplication.sharedApplication()
delegate = AppDelegate.alloc().init()
NSApp().setDelegate_(delegate)
AppHelper.runEventLoop()
if __name__ == '__main__':
main()
Dla wejścia myszy, wystarczy zastąpić NSKeyDownMask
z odpowiednią maskę z listy dostępnej tutaj: http://developer.apple.com/library/mac/#documentation/cocoa/Reference/ApplicationKit/Classes/NSEvent_Class/Reference/Reference.html#//apple_ref/occ/clm/NSEvent/addGlobalMonitorForEventsMatchingMask:handler:
Na przykład NSMouseMovedMask
prace do śledzenia ruchów myszy. Stamtąd można uzyskać dostęp do event.locationInWindow() lub innych atrybutów.
Calvin Cheng, dziękuję. Twoja sugestia działa w systemie OS X 10.8.5.
Kod z http://docs.python.org/faq/library.html#how-do-i-get-a-single-keypress-at-a-time
#!/usr/bin/python
import termios, fcntl, sys, os
fd = sys.stdin.fileno()
oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSANOW, newattr)
oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
try:
while 1:
try:
c = sys.stdin.read(1)
print "Got character", repr(c)
except IOError: pass
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
jeszcze jedno rozwiązanie Key Listeners in python?
- 1. Wysyłanie zdarzeń myszy i klawiatury
- 2. Mac OS X: Zmiana układu klawiatury przechwytywania
- 3. Jak mogę zablokować wejście klawiatury i myszy w C#?
- 4. Używanie ncurses do przechwytywania kliknięć myszy na aplikacji konsolowej
- 5. Czy mogę używać języka Java do tworzenia wieloplatformowych aplikacji mobilnych?
- 6. Rejestr zdarzeń drugiej klawiatury
- 7. Konfiguracja IAdviseSink do przechwytywania zdarzeń dokumentu MSWorda
- 8. Współrzędne myszy wysokiej rozdzielczości i wysokiej szybkości klatek na sekundę w systemie OSX? (Lub inne rozwiązanie?)
- 9. Odbieranie zdarzeń klawiatury iPhone'a
- 10. Filtr HID OSX do drugiej klawiatury?
- 11. Czy obiekt jest "przezroczysty" dla zdarzeń myszy?
- 12. Obraz ekranu przechwytywania w C++ na OSX
- 13. NodeJS rodzime myszy i klawiatury Wiązania
- 14. Zdarzenia klawiatury przechwytywania wxpython w pliku wx.Frame
- 15. Upewnij się, że moja gra XNA jest aktywna przed obsługą zdarzeń myszy i klawiatury.
- 16. uzyskiwanie zdarzeń klawiatury bez ustawienia okna
- 17. Używanie języka Java do wysyłania symulowanych zdarzeń klawiatury systemu Windows do programu w języku C używającego SDL
- 18. Uzyskiwanie pozycji myszy w zdarzeniu klawiatury
- 19. Czy mogę używać Artifactory z PIP Python?
- 20. Generowanie zdarzeń klawiatury dla aplikacji frontowej
- 21. Czy mogę używać oczekiwać w systemie Windows bez instalowania cygwin?
- 22. Czy mogę używać zarówno podświetlania składni języka Python, jak i SQL w tym samym pliku w Vimie?
- 23. Zmiana domyślnego interpretera języka Python w systemie Windows XP
- 24. Konstruktor języka Python i wartość domyślna
- 25. OSX: wykrywanie zdarzeń keyDown obejmujących cały system?
- 26. Jak używać klawiatury do rozwijania menu w komórce programu Excel?
- 27. Naciśnięcie myszy Java - bez zdarzeń
- 28. Czy mogę używać Entity Framework w systemie Windows Phone 8
- 29. Jak wysyłać polecenia klawiatury i myszy do podstawowego systemu operacyjnego za pomocą Ruby?
- 30. Jak używać QCoreApplication :: postEvent do wstrzykiwania zdarzeń wejścia syntetycznego
Niektóre pakiety wymienione tu mieć OS X wsparcia (np 'keyboard'): https://stackoverflow.com/questions/11918999/key -listers-w-python / –