kurze Zusammenfassung:
Ich versuche, ein Programm zu erstellen, das Tastaturereignisse an den Computer sendet, sodass die simulierten Ereignisse für alle Zwecke als tatsächliche Tastenanschläge auf der Tastatur behandelt werden sollten.
Originalbeitrag:
Ich suche nach einer Möglichkeit, Tastaturereignisse mit Python zu generieren.
Angenommen, die Funktion erhält eine Taste, die das Drücken simulieren muss, wie folgt:
keyboardevent('a') #lower case 'a'
keyboardevent('B') #upper case 'B'
keyboardevent('->') # right arrow key
def keyboardevent(key):
#code that simulated 'key' being pressed on keyboard
Das Obige sind offensichtlich Beispiele, aber was ich suche, ist eine Bibliothek, ein Modul oder was auch immer, mit dem ich Tastaturereignisse simulieren kann.
Hinweis : Dies unterscheidet sich vom Senden von Zeichen an Notizblöcke oder vom Eingeben von Text in Felder oder dergleichen. Ich möchte, dass das Python-Skript ein tatsächliches Tastaturereignis simuliert. Der Computer wird denken, dass es wirklich ein Tastaturereignis gibt.
Zusätzlicher Hinweis:
Ich möchte keine Tastenanschläge an das aktive Fenster senden - ich möchte, dass das System glaubt, dass die Tasten der Tastatur gedrückt werden, ein subtiler Unterschied, da einige aktive Fenster bestimmte Tastenkombinationen nicht akzeptieren oder wenn ich Tastaturkürzel verwenden möchte Für Hintergrundprozesse über mein Skript müssen sie nicht durch das aktive Fenster gehen
Bisher habe ich mir diese Dinge angesehen:
Generieren Sie Tastaturereignisse für die vorderste Anwendung
Wie generiere ich Tastendruckereignisse über Python?
Was alles über Apfel war und überhaupt nicht half.
Und das:
Welches ist der einfachste Weg, um Tastatur und Maus in Python zu simulieren?
Das scheint das zu sein, was ich brauche, aber ich kann die Bibliothek dafür oder eine Dokumentation nicht finden.
Ich habe auch mehr Orte gesucht, aber noch keine Lösung gefunden.
quelle
X
Plattformen gibt esxdotool
aber normalerweise nicht standardmäßig installiert. Ich glaube, das Lesen der DokumenteX
sollte nicht schwer sein, ein minimales Modul in C zu schreiben, das das tut, was Sie wollen (ich glaube, es gab vorxsendkeys
einiger Zeit ein Programm).Antworten:
Dies kann mit ctypes erfolgen:
hexKeyCode
ist die virtuelle Tastaturzuordnung, wie sie von der Windows-API definiert wird. Die Liste der Codes ist auf MSDN verfügbar: Virtual-Key-Codes (Windows)quelle
Für python3 und python2 können Sie
pyautogui
(pip install pyautogui
) verwendenEs ist auch plattformübergreifend mit Windows, OSX und Ubuntu LTS.
quelle
press
funktioniert auch mit Medientasten. Ich benutze es, um meinen Computer mitpress('volumemute')
Die Idee von user648852 funktioniert zumindest für mich hervorragend für OS X, hier ist der Code dafür:
quelle
Ich habe versucht, lib Tastatur und es funktioniert gut unter Windows. Die folgende Zeile hilft mir beim Wechseln der Registerkarten im Browser:
quelle
Ich hatte das gleiche Problem und habe dafür eine eigene Bibliothek erstellt, die ctypes verwendet:
quelle
Jede Plattform wird einen anderen Ansatz haben, um Tastaturereignisse generieren zu können. Dies liegt daran, dass sie jeweils Systembibliotheken (und Systemerweiterungen) verwenden müssen. Für eine plattformübergreifende Lösung müssten Sie jede dieser Lösungen nehmen und dann in eine Plattformprüfung einwickeln, um den richtigen Ansatz durchzuführen.
Für Windows können Sie möglicherweise die Erweiterung pywin32 verwenden . win32api.keybd_event
Sie müssen pywin32 untersuchen, um festzustellen, wie es richtig verwendet wird, da ich es noch nie verwendet habe.
quelle
Nur Windows: Sie können entweder Ironpython oder eine Bibliothek verwenden , mit der cPython unter Windows auf die .NET-Frameworks zugreifen kann. Verwenden Sie dann die sendkeys- Klasse von .NET oder die allgemeinere send- Klasse , um einen Tastenanschlag zu simulieren.
Nur OS X: Verwenden Sie PyObjC und dann use
CGEventCreateKeyboardEvent
call.Vollständige Offenlegung: Ich habe dies nur unter OS X mit Python getan, aber ich habe .NET-Sendkeys (mit C #) verwendet, und das funktioniert hervorragend.
quelle
python for .net
. Eine Lösung, wie würde ich dann die verwendensendkeys
. Könnten Sie vielleicht ein Beispiel dafür geben?Mac OS
Hier ist die vollständigere Version der Antwort von @Phylliida in Form einer Klasse mit Codebeispiel:
Hier ist der Demo-Code mit der obigen Klasse:
Dadurch wird die Eingabe von
Hello World!
Text im aktuellen Fenster simuliert .Sie können den obigen Code als Shell-Skript ausführen. Überprüfen Sie den Link zur
keyboard.py
Datei .quelle
Für Python2.7 (Windows32) habe ich nur pywin32-223 installiert . Und ich habe einfachen Python-Code geschrieben:
Es kann überprüft werden, ob Sie den Code ausführen und sofort zum Notizblockfenster (wo der Text bereits vorhanden ist) gehen und den Cursor in die oberste Zeile setzen.
quelle