Obtenir des frappes lors de l'exécution en arrière-plan en Python (Windows)

introduction

Ce n'est peut-être pas très demandé, mais il y a de rares moments où vous souhaitez obtenir des frappes au clavier tout en s'exécutant en arrière-plan (c'est-à-dire que l'application Python est floue). Java a une bibliothèque appelée JNativeHook, qui est raisonnablement facile à utiliser, mais je pense qu'il est possible d'utiliser Java uniquement pour cela. Suite à la recherche d'un moyen de le faire avec Python, je suis resté bloqué, je vais donc laisser un mémorandum.

environnement

Bien qu'il existe quelque chose appelé PyHook. .. ..

La première chose que j'ai recherchée et trouvée à divers endroits était de savoir comment utiliser PyHook. Il semble que vous puissiez vous déplacer en arrière-plan et prendre des événements tels que la touche enfoncée et la touche haut (Intéressant divers sentiments-moss à propos de pyHook).

J'ai laissé tomber la version correspondante de pyHook de http://www.lfd.uci.edu/~gohlke/pythonlibs pour l'essayer.

wheel install pyHook‑1.5.1‑cp36‑cp36m‑win_amd64.whl

Installé avec (cela a pris beaucoup de temps en raison de problèmes de version, etc.).

from pyHook import HookManager
from win32gui import PumpMessages, PostQuitMessage

class Keystroke_Watcher(object):
    def __init__(self):
        self.hm = HookManager()
        self.hm.KeyDown = self.on_keyboard_event
        self.hm.HookKeyboard()


   def on_keyboard_event(self, event):
        try:
            print ('MessageName:',event.MessageName)
            print ('Ascii:', repr(event.Ascii), repr(chr(event.Ascii)))
            print ('Key:', repr(event.Key))
            print ('KeyID:', repr(event.KeyID))
            print ('ScanCode:', repr(event.ScanCode))
            print ('Time:',event.Time)
            print ('-'*5)
        finally:
            return True

   def your_method(self):
        pass

   def shutdown(self):
        PostQuitMessage(0)
        self.hm.UnhookKeyboard()


watcher = Keystroke_Watcher()
PumpMessages()

J'ai essayé de l'exécuter, mais cela fonctionne bien lorsque vous utilisez Emacs, SublimeText, mais dans une situation mystérieuse, cela tombe lorsque j'appuie sur une touche du navigateur Chrome. Comme une erreur

TypeError: KeyboardSwitch() missing 8 required positional arguments: 'msg', 'vk_code', 'scan_code', 'ascii', 'flags', 'time', 'hwnd', and 'win_name'

À la suite de l'enquête, il semble qu'il s'agisse d'un bogue qui se produit lors de l'exécution dans la série Python 3 (https://stackoverflow.com/questions/26156633/pythoncom-crashes-on-keydown-when-used-hooked -à-certaines-applications), dans un état de débordement.

PyHooked

Lorsque je cherchais une bonne alternative, j'ai trouvé quelque chose appelé pyHooked. L'installation est

pip install pyhooked

Et comme indiqué dans example.py sur la page Github,

from pyhooked import Hook, KeyboardEvent, MouseEvent


def handle_events(args):
    if isinstance(args, KeyboardEvent):
        print(args.key_code, args.current_key, args.event_type)

    if isinstance(args, MouseEvent):
        print(args.mouse_x, args.mouse_y)

hk = Hook()  # make a new instance of PyHooked
hk.handler = handle_events  # add a new shortcut ctrl+a, or triggered on mouseover of (300,400)
hk.hook()  # hook into the events, and listen to the presses

En créant un gestionnaire d'événements, vous pouvez facilement prendre les entrées clavier et souris en arrière-plan.

référence

Recommended Posts

Obtenir des frappes lors de l'exécution en arrière-plan en Python (Windows)
Obtenir la date en Python
Obtenez des commentaires YouTube en Python
Obtenir la taille du terminal en Python
Obtenir explicitement EOF en python
Exécution de commandes externes en Python
Obtenez des notes Evernote en Python
Installation de Python en 2 lignes @Windows
Détecter les frappes en python (tty)
Obtenez des synonymes japonais avec Python
Obtenez des données LeapMotion en Python.
Appuyez sur une commande en Python (Windows)
Mettez MeCab dans "Windows 10; Python3.5 (64 bits)"
Obtenir des données de Quandl en Python
Obtenez le chemin du bureau en Python
Obtenez le chemin du script en Python
Mesurer le temps d'exécution de la fonction en Python
Windows10: Installation de la bibliothèque MeCab pour python
Obtenir, publier un mémo de communication en Python
Détecter les frappes en Python (sans Entrée)
Exécuter le module Python unittest dans vs2017
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Démarrez avec Python avec Blender
Si vous êtes bloqué dans Impossible de charger mkl_intel_thread.dll en Python sous Windows
Obtenez des données supplémentaires vers LDAP avec python
Obtenez des taux de change à partir des taux de change ouverts en Python
Obtenir l'équilibre Suica en Python (en utilisant libpafe)
Utilisation de venv dans un environnement Windows + Docker [Python]
Exécution de l'étape de débogage en Python (Bottle, Intellij)
[Python] [Windows] Communication série en Python à l'aide de DLL
Obtenez les données de l'API Google Fit en Python
[Python] [Windows] Faites une capture d'écran avec Python
Comment obtenir stacktrace en python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Obtenez le niveau de la batterie de SwitchBot avec Python
Obtenez un jeton pour conoha avec python
Commençons avec TopCoder en Python (version 2020)
Obtenir la liste de codes EDINET en Python
Obtenez la probabilité de précipitation de XML avec Python
Obtenez Cloud Logging disponible en Python en 10 minutes
Exécution de tâches parallèles à l'aide de concurrent.futures en Python
Caractères Python déformés dans l'environnement Windows + Git Bash
Débarrassez-vous des images DICOM en Python
Obtenir l'historique des métriques de MLflow en Python
Obtenez votre propre adresse IP en Python
[Python] Récupérez les fichiers dans le dossier avec Python
Obtenez la météo à Osaka via l'API Web (python)
Créez simplement un environnement d'exécution Python 3 sous Windows
Récupérer l'appelant d'une fonction en Python
Obtenez plusieurs clés maximales dans le type de dictionnaire Python
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Installez Python 3.5.1 + numpy + scipy + α dans l'environnement Windows
Obtenez le titre de la fenêtre du système X Window en Python
Obtenir des pointeurs vers des membres de structure dans les ctypes Python
Comment obtenir les fichiers dans le dossier [Python]
Fichier d'exécution GUI (WxPython) (pyInstaller) [Windows] dans Python3
Obtenez le fichier, la fonction, le numéro de ligne en cours d'exécution en python
Touchons une partie de l'apprentissage automatique avec Python
Que faire pour obtenir une feuille de calcul Google en Python
Obtenez uniquement des articles de pages Web en Python