[Python-es] simular teclado.

Reynaldo Baquerizo Micheline rbaquerizo en ehas.org
Lun Dic 3 02:06:49 CET 2007


lasizoillo escribió:
> Buenas:
>
> El 29/11/07, Dani <dani.berzas en gmail.com> escribió:
>   
>>>> Ahora bien, ¿como envío por el PIPE códigos de teclas de función, si se
>>>>         
>>> ha
>>>       
>>>> pulsado una flecha o la tecla enter?.
>>>>         
>> Fíjate en el método communicate() de la clase Popen en subprocess.
>>
>>     
>
> Con este truco puedes enviar datos tal como se enviarian por la
> entrada estandar, que normalmente implica recoger cosas de teclado,
> pero no lo estas garantizando.
>
>   
>> Si no lo he entendido mal este método solo trabaja con cadenas. Crea un
>> objeto fichero que es la 'entrada' al PIPE hacia la aplicación que se ha
>> lanzado con Popen. El probema es que este pipe es tipo texto, y no se como
>> mandar los códigos de las teclas de flechas, función, retorno, etc... Creo
>> que para eso sería necesario un objeto fichero de tipo binario. Tengo
>> entendido que las teclas 'especiales' tienen un código de dos bytes, por
>> ejemplo F1 es (0,59), enter es (0,13) y flecha derecha (224,77).
>>
>>     
>
> Creo que el cómo envie en binario los datos el teclado a su
> correspondiente controlador no te va a servir de mucho :-(
>
> Quiza con alguna secuencia de escape... De todas formas yo no perdería
> mucho tiempo por ahí.
>
>   
>> El código que más se parece a lo que quiero hacer es SendKeys[1], pero en
>> este precisamente la rutina de comunicación con la aplicación está escrita
>> en C. Además no se comunica con una aplicación que hayamos lanzado sino con
>> la ventana que tiene el control en ese momento.
>>
>>     
>
> Por lo que he visto, usa el API de windows para simular las
> pulsaciones. Y si no te importa usar el API de windows no hay
> problemas en usarlo tambien para ganar el foco a la ventana de la
> aplicación que has lanzado. Puedes simular tambien el ratón y lo que
> haga falta. Pero si vas a usar el API de windows creo que lo más facil
> es usar esto http://python.net/crew/mhammond/win32/
>
>   
Tengo una duda con esto,

el problema es, ¿cómo detectar las pulsaciones del teclado? o ¿cómo 
enviarlas?

No te serviría pygame [1] para detectarlas?
Tienes pensado enviar alguna otra cosa por la PIPE que no sean las 
pulsaciones del teclado?

[1] http://www.pygame.org/docs/ref/key.html

Saludos,
>> ¿Alguien ha probado algo similar?
>>     
>
> Probe hace años python para ayudado del api de windows usar una
> aplicación (creo que era con el api del link). El usar ventanitas
> desde otro proceso es algo que no te va a permitir las X Windows si
> cambias a Linux o FreeBSD. Esa feature es algo que tenia (¿tiene?)
> windows para permitir hacer keyloggers y demás troyanos.
>
> Veo solución a tu problema, pero no una solución portable. :-(
>
>   
>> Gracias.
>>     
>
> Espero que las merezca ;-)
>
>
> Salud y verduras:
>
> Javi
> _______________________________________________
> Lista de correo Python-es 
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>   



Más información sobre la lista de distribución Python-es