Estoy tratando de escribir un grabador de macros simple en Python para OSX, algo que puede capturar eventos de mouse y clave mientras el script se ejecuta en segundo plano y reproducirlos. Puedo usar autopy para este último, ¿existe una biblioteca igualmente simple para el primero?¿Puedo usar Python para capturar eventos de teclado y mouse en OSX?
Respuesta
No parece haber una manera de hacerlo en Python en OSX.
Sé que puede usar curses
para capturar la entrada de la clave, pero no estoy seguro acerca de la entrada del mouse. No solo eso, sino que si no me equivoco, se incluye en la biblioteca estándar con 2.7.2.
Aquí es una solución sin utilizar curses
:
http://docs.python.org/faq/library.html#how-do-i-get-a-single-keypress-at-a-time
Esta pregunta se hizo hace algún tiempo aquí - Python cross-platform listening for keypresses?
Usted puede encontrar el código de ejemplo no muy útil!
Hoy encontré algunas soluciones a este problema y pensé en dar la vuelta y compartir aquí para que otros pudieran ahorrar tiempo de búsqueda.
Una solución multiplataforma ingenioso para simular la entrada del teclado y el ratón: http://www.autopy.org/
también encontré una breve pero de trabajo (A partir del león de montaña) ejemplo de cómo conectarse globalmente pulsaciones de teclas. La única advertencia es que debes usar Python2.6 ya que 2.7 no parece tener los módulos objc disponibles.
#!/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()
Para la entrada del ratón, basta con sustituir NSKeyDownMask
con la máscara relevante de la lista disponible aquí: http://developer.apple.com/library/mac/#documentation/cocoa/Reference/ApplicationKit/Classes/NSEvent_Class/Reference/Reference.html#//apple_ref/occ/clm/NSEvent/addGlobalMonitorForEventsMatchingMask:handler:
Por ejemplo, NSMouseMovedMask
obras para el seguimiento de los movimientos del ratón. Desde allí, puede acceder a event.locationInWindow() u otros atributos.
Calvin Cheng, gracias. tu sugerencia funciona en OS X 10.8.5.
Código de 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)
Una solución más Key Listeners in python?
- 1. Enviar eventos de mouse y teclado
- 2. Ignorar eventos de mouse y teclado en Qt
- 3. ¿Cómo puedo capturar los eventos del teclado desde qué teclas?
- 4. Capturar eventos de mouse de cada componente en C# WInForm
- 5. Consumir eventos de mouse/trackpad OSX con un evento toque
- 6. Acceso directo a eventos de teclado en OSX
- 7. ¿Existe una API de bajo nivel python multiplataforma para capturar o generar eventos de teclado?
- 8. wxpython capturar eventos del teclado en un wx.Frame
- 9. ¿desactivar o bloquear el mouse y el teclado en python?
- 10. ¿Puedo obtener eventos de mouse en QGraphicsItem?
- 11. ¿Cómo puedo usar la sincronización de JavaScript para controlar los eventos de detención del mouse y del mouse?
- 12. ¿Cómo puedo consumir eventos clave solo en un teclado con un HID específico en Mac OSX?
- 13. ¿Cómo puedo capturar todos los eventos del mouse en un JFrame/Swing?
- 14. Herramientas para automatizar eventos de mouse y teclado enviados a una aplicación de Windows
- 15. de ignición y capturar eventos personalizados
- 16. ¿Qué señal de teclado aparte de Ctrl-C puedo capturar?
- 17. Cómo capturar eventos de teclado en un elemento que no acepta el foco?
- 18. Seleccione un área para capturar usando el mouse
- 19. Linux, cómo capturar pantalla y simular movimientos del mouse
- 20. Asegurándome de que mi juego XNA tiene foco antes de manejar eventos de mouse y teclado
- 21. ¿Hay alguna manera de desactivar algún elemento DOM para capturar eventos del mouse?
- 22. Subclase NSSlider: necesita una solución alternativa para los eventos faltantes del mouse (Cocoa OSX)
- 23. Crear una ventana WPF completamente transparente para capturar eventos del mouse
- 24. Emulación de mouse/teclado Bluetooth
- 25. Recibir eventos de teclado de iPhone
- 26. Mac OSX Java: Recibir eventos del mouse cuando no está activado
- 27. Entrada de teclado/mouse en C++
- 28. Eventos de teclado para elementos secundarios en un div satisfactorio?
- 29. Eventos globales del mouse
- 30. MouseListener para JPanel mouse missing Eventos clonados
Algunos paquetes mencionados aquí tienen el apoyo OS X (por ejemplo 'keyboard'): https://stackoverflow.com/questions/11918999/key -listeners-in-python / –