2008-09-25 76 views
16

Es posible hacer que parezca que un sistema que se presionó una tecla, por ejemplo, necesito hacer Una clave se debe presionar miles de veces, y le tomará mucho tiempo hacerlo manualmente , Me gustaría escribir algo para hacerlo por mí, y lo único que sé bastante bien es Python.Pulsaciones de teclas en Python

Una mejor manera de expresarlo, necesito emular una pulsación de tecla, I.E. no capturar presionar una tecla.

Más información (según se solicite): Estoy ejecutando Windows XP y necesito enviar las claves a otra aplicación.

Respuesta

21

Instalar las extensiones pywin32. A continuación, puede hacer lo siguiente:

import win32com.client as comclt 
wsh= comclt.Dispatch("WScript.Shell") 
wsh.AppActivate("Notepad") # select another application 
wsh.SendKeys("a") # send the keys you want 

Búsqueda de documentación del objeto WScript.Shell (creo que instala por defecto en todas las instalaciones de Windows XP). Puede comenzar here, quizás.

EDIT: Envío de F11

import win32com.client as comctl 
wsh = comctl.Dispatch("WScript.Shell") 

# Google Chrome window title 
wsh.AppActivate("icanhazip.com") 
wsh.SendKeys("{F11}") 
2

Probablemente es posible - pero ¿dónde quieres que te presionen las teclas? Para otra aplicación? Ese sería probablemente el caso de entender el toolkit de ventanas de su plataforma y enviar los mensajes correctos a la ventana derecha.

Aclare sus requisitos, y estoy seguro de que podemos ayudar.

8

AutoHotKey es perfecto para este tipo de tareas (teclado automatización/reasignación)

de secuencias de comandos para enviar "A" 100 veces:

Send {A 100} 

Eso es todo

EDITAR: Para enviar las claves para una aplicación específica:

WinActivate Word 
Send {A 100} 
+2

Esto funciona, pero no responde la pregunta, entonces lo votaré pero no puedo aceptarlo como respuesta. – UnkwnTech

1

Si eres plataforma es Windows, no me recomiendan realmente Python. En cambio, mira en Autohotkey. Confíe en mí, me encanta Python, pero en esta circunstancia, un macroprograma es la herramienta ideal para el trabajo. Las secuencias de comandos de Autohotkey son solo decentes (en mi opinión), pero la facilidad de simular la entrada le ahorrará incontables horas. Los scripts de Autohotkey también se pueden "compilar", por lo que no es necesario que el intérprete ejecute el script.

Además, si esto es para algo en la Web, recomiendo iMacros. Es un complemento de Firefox y, por lo tanto, tiene una integración mucho mejor con los sitios web. Por ejemplo, puede decir "escribir 1000 'a en este formulario" en lugar de "simular un clic de mouse en (319,400) y luego presionar' a '1000 veces".

Para Linux, desafortunadamente no he podido encontrar una buena manera de crear fácilmente macros de teclado/mouse.

1

Manera alternativa de configurar la ventana en primer plano antes de enviar evento de pulsación de tecla.

hwnd = win32gui.FindWindowEx(0,0,0, "App title") 
win32gui.SetForegroundWindow(hwnd) 
9

También podría utilizar PyAutoGui para enviar una tecla virtual pulsa.

Aquí está la documentación: https://pyautogui.readthedocs.org/en/latest/

import pyautogui 


pyautogui.press('Any key combination') 

También puede enviar teclas como la tecla de mayúsculas o la tecla enter con:

import pyautogui 

pyautogui.press('shift') 

Pyautogui también puede enviar mensajes de texto directamente de este modo:

import pyautogui 

pyautogui.typewrite('any text you want to type') 

En cuanto a presionar la tecla "A" 1000 veces, se vería algo li ke esto:

import pyautogui 

for i in range(999): 
    pyautogui.press("a") 

alt-tab u otras tareas que requieren más de una tecla que se pulsa al mismo tiempo:

import pyautogui 

# Holds down the alt key 
pyautogui.keyDown("alt") 

# Presses the tab key once 
pyautogui.press("tab") 

# Lets go of the alt key 
pyautogui.keyUp("alt") 
+1

Impresionante, exactamente lo que necesitaba ... y permite capturar capturas de pantalla también. –

2

Comprobar Este módulo keyboard con muchas features.Install que, tal vez con este comando:

pip3 install keyboard 

A continuación, utilizar este código:

import keyboard 
keyboard.write('A',delay=0) 

Si desea escribir 'A' varias veces, simplemente utilice un bucle.
Nota:
La tecla 'A' será presionado por todo el windows.Means la secuencia de comandos se ejecuta y se fue a navegador, el guión comenzará a escribir allí.

+0

¿Hay alguna manera de usar esta biblioteca para mantener presionada la tecla durante unos segundos? No quiero presionar múltiples teclas, solo una hasta que se lance. He revisado los documentos de la API y no puedo encontrar exactamente lo que estoy buscando, muchas cosas con combinaciones de botones. – thomascrha

Cuestiones relacionadas