web-dev-qa-db-fra.com

Appui sur les touches Python

Est-il possible de faire apparaître à un système qu'une touche a été enfoncée, par exemple je dois faire A touche plusieurs milliers de fois, et il faut beaucoup de temps pour le faire manuellement, je voudrais écrire quelque chose pour le faire pour moi, et la seule chose que je connais assez bien est Python.

Une meilleure façon de le dire, je dois émuler une pression sur une touche, I.E. pas capturer une pression de touche.

Plus d'informations (comme demandé): J'utilise Windows XP et j'ai besoin d'envoyer les clés à une autre application.

23
UnkwnTech

Installez les extensions pywin32 . Ensuite, vous pouvez effectuer les opérations suivantes:

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

Recherchez la documentation de l'objet WScript.Shell (je crois qu'il est installé par défaut dans toutes les installations Windows XP). Vous pouvez commencer ici , peut-être.

EDIT: Envoi F11

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

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

Vous pouvez également utiliser PyAutoGui pour envoyer une pression de touche virtuelle.

Voici la documentation: https://pyautogui.readthedocs.org/en/latest/

import pyautogui


pyautogui.press('Any key combination')

Vous pouvez également envoyer des clés comme la touche Maj ou entrer une clé avec:

import pyautogui

pyautogui.press('shift')

Pyautogui peut également envoyer du texte direct comme ceci:

import pyautogui

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

Quant à appuyer sur la touche "A" 1000 fois, cela ressemblerait à ceci:

import pyautogui

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

alt-tab ou autres tâches qui nécessitent d'appuyer simultanément sur plusieurs touches:

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")
25
Malachi Bazar

AutoHotKey est parfait pour ce genre de tâches (automatisation/remappage du clavier)

Script à envoyer "A" 100 fois:

Send {A 100}

C'est tout

[~ # ~] éditez [~ # ~] : pour envoyer les clés à une application spécifique:

WinActivate Word
Send {A 100}
10
PabloG

Vérifiez ce module ( clavier avec de nombreuses fonctionnalités.Installez-le, peut-être avec cette commande:

pip3 install keyboard

Utilisez ensuite ce code:

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

Si vous voulez écrire plusieurs fois 'A', utilisez simplement une boucle.
Remarque:
La touche 'A' sera pressée pour toutes les fenêtres. Cela signifie que le script est en cours d'exécution et que vous êtes allé dans le navigateur, le script commencera à y écrire.

8
user8167727

Autre moyen de définir la fenêtre de préférence au premier plan avant d'envoyer l'événement de pression de touche.

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

Si votre plate-forme est Windows, je ne recommanderais pas réellement Python. Regardez plutôt Autohotkey . Croyez-moi, j'aime Python, mais dans ce cas, un programme macro est l'outil idéal pour le travail. Les scripts d'Autohotkey ne sont que décents (à mon avis), mais la facilité de simulation des entrées vous fera économiser d'innombrables heures. Les scripts Autohotkey peuvent également être "compilés", vous n'avez donc pas besoin de l'interpréteur pour exécuter le script.

De plus, si c'est pour quelque chose sur le Web, je recommande iMacros . C'est un plugin Firefox et a donc une bien meilleure intégration avec les sites Web. Par exemple, vous pouvez dire "écrire 1000 'a sous cette forme" au lieu de "simuler un clic de souris à (319 400) puis appuyer sur' a '1000 fois".

Pour Linux, je n'ai malheureusement pas pu trouver un bon moyen de créer facilement des macros clavier/souris.

2
Martin W

PyAutoGui vous permet également d'appuyer plusieurs fois sur un bouton:

pyautogui.press('tab', presses=5)   # press TAB five times in a row

pyautogui.press('A', presses=1000)   # press A a thousand times in a row
2
jeppoo1