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.
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.
Recommended Posts