2009-03-24 8 views
11

Estoy tratando de escribir un programa python multiplataforma que se ejecute en segundo plano, supervise todos los eventos del teclado y cuando vea algunos accesos directos específicos, genera uno o más eventos de teclado propios. Por ejemplo, esto podría ser útil para tener Ctrl- @ asignado a "[email protected]", de modo que cada vez que algún programa me pida mi dirección de correo electrónico solo tenga que escribir Ctrl- @.¿Existe una API de bajo nivel python multiplataforma para capturar o generar eventos de teclado?

Sé que estos programas ya existen y estoy reinventando la rueda ... pero mi objetivo es solo aprender más acerca de las API de teclado de bajo nivel. Además, la respuesta a esta pregunta podría ser útil para otros programadores, por ejemplo, si desean iniciar una conexión SSH que requiere una contraseña, sin usar pexpect.

Gracias por su ayuda.

Nota: hay a similar question pero está limitado a la plataforma de Windows y no requiere Python. Estoy buscando una API de plataforma multiplataforma. También hay otras preguntas relacionadas con los eventos del teclado, pero aparentemente no les interesan los eventos de teclado en todo el sistema, solo los atajos de teclado específicos de la aplicación.

Editar: Probablemente debería añadir un descargo de responsabilidad aquí: Hago no quiero escribir un keylogger. Si necesitaba un keylogger, podría descargar uno de la web de todos modos. ;-)

+0

[aquí] (http://stackoverflow.com/a/35373648/2924421) es una solución que funciona para OS X – Phylliida

Respuesta

8

No existe dicha API. Mi solución fue escribir un módulo de ayuda que usaría un ayudante diferente según el valor de os.name.

En Windows, use Win32 extensions.

En Linux, las cosas son un poco más complejas ya que los sistemas operativos reales protegen a sus usuarios contra los registradores de pulsaciones de teclas [*]. Así que aquí, necesitarás un proceso raíz que mire uno de [] los identificadores en /dev/input/. Su mejor opción es, probablemente, buscar una entrada debajo de /dev/input/by-path/ que contiene las cadenas "kbd" o "keyboard". Eso debería funcionar en la mayoría de los casos.

[*]: Por Dios, ni siquiera a mi escáner de virus/troyano se quejará cuando comienzo a un programa de Python que se engancha en los eventos de teclado ...

+0

respuesta muy clara, muchas gracias. :-) – MiniQuark

0

bibliotecas de interfaz entre plataformas tales como Tkinter o wxPython tienen API para eventos de teclado. Utilizándolos, puede asignar «CTRL» + «@» a una acción.

+1

Desafortunadamente, esto no me dará un monitor de teclado en todo el sistema, solo uno específico de la aplicación. – MiniQuark

0

En linux, es posible que desee echar un vistazo a pykeylogger. Por alguna extraña razón, leer desde/dev/input/.... no siempre funciona cuando X se está ejecutando. Por ejemplo, no funciona en ubuntu 8.10. Pykeylogger usa xlib, que funciona exactamente cuando la otra opción no. Todavía estoy investigando esto, así que si encuentras una forma más sencilla de hacerlo, dímelo.

+0

Esta respuesta tiene casi tres años .... –

6

Como el tipo que escribió el puerto original de pykeylogger linux, puedo decir que no es realmente uno de plataforma cruzada. Básicamente reescribí la API de pyhook para eventos de teclado para capturar desde el servidor x, utilizando la extensión de registro. Por supuesto, esto supone que la extensión de registro está allí, cargada en el servidor x.

A partir de ahí, es básicamente solo detectar si está en Windows o Linux, y luego cargar el módulo correcto para el sistema operativo. Todo lo demás debería ser idéntico.

Eche un vistazo a la fuente de pykeylogger, en pyxhook.py para la clase e implimentation. De lo contrario, simplemente cargue ese módulo, o pyhook en su lugar, dependiendo del sistema operativo.

1

He hecho algunas pruebas en Ubuntu 9.10. pykeylogger no parece estar funcionando. He intentado cambiar el /etc/X11/xorg.conf para permitir que se cargue el módulo, pero en esa versión específica de ubuntu no hay xorg.conf. ¡Entonces, en mi opinión, pykelogger NO está funcionando en ubuntu 9.10!

+0

Yo también. No puedo ejecutar pykeylogger en Ubuntu 9.10 – Rory

+0

Para el registro, creo que este es el error que impide que pykeylogger funcione en ubuntu 9.10 https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/ 315456 – Rory

Cuestiones relacionadas