Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: minced en 17 Mayo 2015, 19:57 pm



Título: Pulsación de teclas con python
Publicado por: minced en 17 Mayo 2015, 19:57 pm
Estoy buscando como hacer esto y no encuentra nada, o tal vez no estoy buscando bien.

Estoy intentando hacer que por ejemplo al pulsar F1, o la tecla que yo defina, escriba un texto, pero no en la terminal si no que lo saque como si fuera escrito por el teclado, por ejemplo, si tengo el archivo.py minizado y pulso F1, me escriba "hola" en el campo de texto de otra aplicación como una pagina web por ejemplo.

Gracias por vuestro tiempo, seguiré buscando.


Título: Re: Pulsación de teclas con python
Publicado por: tincopasan en 18 Mayo 2015, 01:18 am
bueno en principio es fácil, lo que debes hacer es obtener el nombre de la aplicacion a la que quieres enviar un mensaje, despues obtener el handle del objeto contenedor al cual le enviaras el mensaje y por último enviar dicho mensaje, para ello debes usar algunas de las apis de windows como Findwindow, SendMessage por lo que tienes que investigar como usar apis en python, después implementar dichas apis. Cuando tengas código y tengas dudas plantealas con dicho código, hay muchos expertos que te ayudarán facilmente, pero dudo que alguien te haga la tarea.


Título: Re: Pulsación de teclas con python
Publicado por: Pablo Videla en 18 Mayo 2015, 01:21 am
Esto te puede ser util.

https://pypi.python.org/pypi/SendKeys/0.3


Título: Re: Pulsación de teclas con python
Publicado por: minced en 18 Mayo 2015, 08:28 am
Esto te puede ser util.

https://pypi.python.org/pypi/SendKeys/0.3
Gracias, esto ayuda bastante.

bueno en principio es fácil, lo que debes hacer es obtener el nombre de la aplicacion a la que quieres enviar un mensaje, despues obtener el handle del objeto contenedor al cual le enviaras el mensaje y por último enviar dicho mensaje, para ello debes usar algunas de las apis de windows como Findwindow, SendMessage por lo que tienes que investigar como usar apis en python, después implementar dichas apis. Cuando tengas código y tengas dudas plantealas con dicho código, hay muchos expertos que te ayudarán facilmente, pero dudo que alguien te haga la tarea.
En ningún momento pretendí que me lo dieran hecho, el problema es que no sabia como enfocar la "ayuda" para buscarlo bien por google.
Cuando llegue por la tarde analizare el ejemplo del compañero anterior que tiene muy buena pinta.

Saludos y gracias  ;)


Título: Re: Pulsación de teclas con python
Publicado por: Eleкtro en 18 Mayo 2015, 09:25 am
Cómo ya te han comentado, primero debes analizar la aplicación para localizar el control de edición (Edit Control) al que pretendes enviarle el mensaje que contiene las pulsaciones del teclado (Key Strokes).

Para ayudarte en el análisis de la aplicación (para obtener los nombres de las classes, el handle de las ventanas, y el handle de los controles) puedes utilizar infinidad de herramientas, entre ellas está WinSpy++, y las varias herramientas de Microsoft UI Automation que vienen incluidas en la SDK de Windows, en especial la aplicación Microsoft UI Inspect.

WinSpy++ (http://www.catch22.net/software/winspy-17)
Microsoft Inspect (https://msdn.microsoft.com/en-us/library/windows/desktop/dd318521%28v=vs.85%29.aspx)
Windows Software Development Kit (SDK) for Windows 8.1 (https://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx)

Cuando ya tengas los datos necesarios para interactuar con dicha aplicación, lo aplicas en tu código mediante la API de Windows (a falta de poder utilizar alguna implementación de Microsoft UI Automation bajo Python, cosa que desconozco, pero al menos en .Net es sencillo y te ahorra todo el P/Invoking);
dependiendo de la ubicación del control puedes necesitar utilizar unas funciones u otras, pero tienes toda la documentación necesaria en la MSDN (y ejemplos de uso en Google):

EnumWindows function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx)
EnumChildWindows function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633494%28v=vs.85%29.aspx)
FindWindowEx function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633500%28v=vs.85%29.aspx)
GetClassName function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633582%28v=vs.85%29.aspx)
GetDlgItem function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms645481%28v=vs.85%29.aspx)
SendMessage function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx)

Saludos.