Erhalten Sie Tastenanschläge während der Hintergrundausführung in Python (Windows)

Einführung

Es ist möglicherweise nicht sehr gefragt, aber es gibt seltene Fälle, in denen Sie Tastenanschläge erhalten möchten, während Sie im Hintergrund ausgeführt werden (dh die Python-App ist unscharf). Java hat eine Bibliothek namens JNativeHook, die recht einfach zu verwenden ist, aber ich denke, es ist möglich, Java nur dafür zu verwenden. Als ich nach einer Möglichkeit suchte, dies mit Python zu tun, blieb ich stecken und werde ein Memorandum hinterlassen.

Umgebung

Obwohl es so etwas wie PyHook gibt. .. ..

Das erste, was ich an verschiedenen Stellen nachgeschlagen und gefunden habe, war die Verwendung von PyHook. Es scheint, dass Sie sich im Hintergrund bewegen und Ereignisse wie Key Down und Key Up (Interessantes, verschiedenes Gefühlsmoos über pyHook) aufnehmen können.

Ich habe die entsprechende Version von pyHook von http://www.lfd.uci.edu/~gohlke/pythonlibs entfernt, um es auszuprobieren.

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

Installiert mit (es hat aufgrund von Versionsproblemen usw. viel Zeit in Anspruch genommen).

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()

Ich habe versucht, auszuführen, aber es funktioniert gut, wenn Emacs, SublimeText, verwendet wird, aber in einer mysteriösen Situation fällt es, wenn ich eine Taste im Chrome-Browser drücke. Als Fehler

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

Als Ergebnis der Untersuchung scheint es sich um einen Fehler zu handeln, der bei der Ausführung in der Python 3-Serie (https://stackoverflow.com/questions/26156633/pythoncom-crashes-on-keydown-when-used-hooked) auftritt -auf bestimmte Anwendungen), in einem Zustand der Überforderung.

PyHooked

Als ich nach einer guten Alternative suchte, fand ich etwas namens pyHooked. Installation ist

pip install pyhooked

Und wie in example.py auf der Github-Seite gezeigt,

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

Durch Erstellen eines Ereignishandlers können Sie problemlos Tastatur- und Mauseingaben im Hintergrund vornehmen.

Referenz

Recommended Posts

Erhalten Sie Tastenanschläge während der Hintergrundausführung in Python (Windows)
Holen Sie sich Datum in Python
Holen Sie sich YouTube-Kommentare in Python
Holen Sie sich die Terminalgröße in Python
Holen Sie sich explizit EOF in Python
Externe Befehlsausführung in Python
Holen Sie sich Evernote-Notizen in Python
Python-Installation in 2 Zeilen @Windows
Erkennen Sie Tastenanschläge in Python (tty)
Holen Sie sich japanische Synonyme mit Python
Holen Sie sich LeapMotion-Daten in Python.
Drücken Sie einen Befehl in Python (Windows)
Setzen Sie MeCab in "Windows 10; Python3.5 (64bit)"
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Skriptpfad in Python
Messen Sie die Ausführungszeit von Funktionen in Python
Windows 10: Installieren der MeCab-Bibliothek für Python
Holen Sie sich ein Kommunikationsmemo in Python
Tastenanschläge in Python erkennen (ohne Eingabe)
Führen Sie das Python-Unittest-Modul in vs2017 aus
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Hostnamen in Python
Beginnen Sie mit Python mit Blender
Wenn Sie nicht weiterkommen, können Sie mkl_intel_thread.dll in Python unter Windows nicht laden
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Erhalten Sie Wechselkurse von offenen Wechselkursen in Python
Holen Sie sich Suica Balance in Python (mit libpafe)
Verwenden von venv in der Windows + Docker-Umgebung [Python]
Debug-Schrittausführung in Python (Bottle, Intellij)
[Python] [Windows] Serielle Kommunikation in Python über DLL
Holen Sie sich Google Fit API-Daten in Python
[Python] [Windows] Machen Sie eine Bildschirmaufnahme mit Python
Wie bekomme ich Stacktrace in Python?
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Holen Sie sich den Batteriestand von SwitchBot mit Python
Holen Sie sich ein Zeichen für Conoha mit Python
Beginnen wir mit TopCoder in Python (Version 2020)
Ruft die EDINET-Codeliste in Python ab
Holen Sie sich mit Python die Niederschlagswahrscheinlichkeit aus XML
Holen Sie sich die Cloud-Protokollierung in Python in 10 Minuten
Parallele Taskausführung mit concurrent.futures in Python
Verstümmelte Python-Zeichen in der Windows + Git Bash-Umgebung
Entfernen Sie DICOM-Bilder in Python
Abrufen des Metrikverlaufs von MLflow in Python
Holen Sie sich Ihre eigene IP-Adresse in Python
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Holen Sie sich das Wetter in Osaka über Web-API (Python)
Erstellen Sie einfach eine Python 3-Ausführungsumgebung unter Windows
Holen Sie sich den Aufrufer einer Funktion in Python
Holen Sie sich mehrere maximale Schlüssel im Python-Wörterbuchtyp
Holen Sie sich die Bild-URL mithilfe der Flickr-API in Python
Installieren Sie Python 3.5.1 + numpy + scipy + α in einer Windows-Umgebung
Ruft den Fenstertitel des X-Fenstersystems in Python ab
Abrufen von Zeigern auf Strukturelemente in Python-ctypes
So erhalten Sie die Dateien im Ordner [Python]
GUI (WxPython) Ausführungsdatei (pyInstaller) [Windows] in Python3
Holen Sie sich die Datei, Funktion, Zeilennummer in Python ausgeführt
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Was tun, um eine Google-Tabelle in Python zu erhalten?
Holen Sie sich nur Artikel von Webseiten in Python