2017-05-22 4 views
0

Ich habe eine Weile damit zu kämpfen, also dachte ich, ich würde hier fragen. Ich versucheWie führe ich die Funktion bei Tastendruck im Hintergrund aus?

def pause(): 
global pid, p 
pid = [pid] 
p = psutil.Process(pid) 
p.suspend() 

gebunden an die ‚Ende‘ Schlüssel zu erhalten, die mit einer Variablen geändert werden kann. Wie kann ich es an einen Tastendruck binden, während es auf dem Bildschirm nicht im Fokus steht? Tut mir leid, wenn das verwirrend ist, ich meine, dass das Skript hinter einer anderen Anwendung läuft, aber trotzdem den Tastendruck registriert.

Danke, Max

Antwort

1

würde ich wahrscheinlich pyHook verwenden, um dies zu erreichen. Es erfasst Maus- und Tastatureingaben auf Systemebene.

Hier ist ein einfaches Beispiel

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: 
      if event.KeyID == 35: # end is keycode 35 
       self.pause() 
     finally: 
      return True 

    def pause(): 
     global pid, p 
     pid = [pid] 
     p = psutil.Process(pid) 
     p.suspend() 

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


watcher = Keystroke_Watcher() 
PumpMessages() 
+0

Danke für die Antwort, ich werde es ausprobieren, wenn ich nach Hause komme. Wie würde ich einen anderen Schlüssel an eine andere Funktion binden? Wie "Ende" für eine Funktion und "Zuhause" für eine andere? –

+0

Update zu meiner vorherigen Frage: Ich gehe davon aus, dass ich eine weitere "if" -Anweisung hinzufügen kann und es funktioniert, richtig? –

+0

Sie müssen nur die Schlüsselcodes suchen, die diesen Schlüsseln zugeordnet sind. Stellen Sie sicher, dass die Funktion, an die Sie binden, nicht zu lange verzögert wird. Wenn der Code nicht zurückgibt True der Tastenanschlag ist blockiert – user2682863

Verwandte Themen