Hallo zusammen!
Ich wüsste gerne ob es mit Python möglich ist, den Bildschirminhalt (unter Windows) zu analysieren; z.B. ob in einem bestimmten Bereich eine Veränderung auftritt, dort ein bestimmter Text steht, oder ähnliches.
Ebenso würde ich gerne Maus- und Tastatureingaben veranlassen.
Die Frage ist, ob das mit Python überhaupt geht, oder ob sowas "systemnahen", kompilierbaren Sprachen wie C oder ähnlichem vorbehalten ist.
Hintergrund ist, das wir noch eine handvoll Windows Spezialprogramme haben, bei denen es cool wäre, wenn bei bestimmten Events eine Software bestimmte Aktionen ausführen würde. Ein Beispiel ist die Kontrollsoftware zu unserer Schließanlage: Es wäre extrem cool, wenn man für bestimmte Bereiche eine SMS versenden könnte und das Programm "drückt" in der Software durch eine Kombination von Mausklicks daraufhin bestimmte Türen remote auf; z.B. das Garagentor.
Angenommen, das geht: Kann ggf. sogar jemand mit einem Modul-/Projektnamen aufwarten? Ich gehe mal nicht davon aus, das sowas mit zwei-drei Zeilen Python Bordmitteln funktioniert, oder?
Bildschirminhalt erkennen und Maus/Tastaturbew. steuern?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Für Windows solltest ihr euch mal Ranorex angucken! Das ist zwar primär für automatisierte Tests gedacht, kann man aber auch prima für das Automatisieren von Aktionen nutzen, die regelmäßig ablaufen sollen
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Das sieht doch für das Steuern der Eingaben schonmal klasse aus. Ich hatte an so etwas gedacht, das man durch die BS-Erkennung den anzuklickenden Bereich identifiziert und anschließend "in diese Koordinate" klickt, aber das sieht mindestens genauso gut aus, wenn nicht besserBlackJack hat geschrieben:@Judge: So direkt mit Bordmitteln nicht aber es gibt Module für so etwas. pywinauto fällt mir da so spontan ein.
Danke dafür schonmal!
Da steht nur was von einer C# und VB.NET API - was bringt das für Python?Hyperion hat geschrieben:Für Windows solltest ihr euch mal Ranorex angucken!
Soviel schonmal (in Rekordzeit - WOW ) zur Eingabensteuerung ... wie sieht es mit dem "ablesen" des Bildschirminhaltes aus? Gibt es da auch Möglichkeiten / Tipps?
@Judge: Was willst Du denn ablesen? Irgendetwas was man mit `pywinauto` nicht ansprechen kann? Man kann damit ja nicht nur Eingaben tätigen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Na, IronPython existiert Und zur Not musst Du das eben mit etwas anderem als Python coden - aber bei Ranorex muss man auch eher selten Code schreiben für einfache Dinge. Das meiste geht wirklich komfortabel über GUI!Judge hat geschrieben: Da steht nur was von einer C# und VB.NET API - was bringt das für Python?
Auch das geht natürlich mit Ranorex! Da gibts iirc auch ein Video-Tutorial... das solltest Du Dir vielleicht mal angucken, um einen Eindruck zu bekommen.Judge hat geschrieben: Soviel schonmal (in Rekordzeit - WOW ) zur Eingabensteuerung ... wie sieht es mit dem "ablesen" des Bildschirminhaltes aus? Gibt es da auch Möglichkeiten / Tipps?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Mir würde http://www.sikuli.org/ einfallen
Naja, so tief bin ich jetzt in pywinauto noch nicht eingetaucht; bin auch noch Python Anfänger und werde da wohl erst mal ein wenig "forschen" müssen, was alles geht.BlackJack hat geschrieben:@Judge: Was willst Du denn ablesen? Irgendetwas was man mit `pywinauto` nicht ansprechen kann? Man kann damit ja nicht nur Eingaben tätigen.
Für eine zweite Programmier-Idee fiel mir aber etwas in Verbindung mit einem Kamera-Bild ein: Wenn sich in einem bestimmten Bereich in dem von der Kamera gelieferten Bild etwas verändert/bewegt, dann ... .
Anstatt Funktionen zum Auslesen des Inhalts zu schreiben, würde es sich, zumindest vom Aufwand her, eher empfehlen bestimmte Bildschirmkoordinaten direkt anzusprechen.
Man speichert die Koordinaten, die angeklickt werden sollen, bei einer bestimmten Auflösung des Softwarefensters.
So könntest du:
- überprüfen ob Programm läuft / starten / Fenstergröße festlegen
- in dict gespeicherte Koordinaten ansprechen
Man speichert die Koordinaten, die angeklickt werden sollen, bei einer bestimmten Auflösung des Softwarefensters.
So könntest du:
- überprüfen ob Programm läuft / starten / Fenstergröße festlegen
- in dict gespeicherte Koordinaten ansprechen
Hört sich gut an und sollte auch da klappen, wo pywinauto ggf. wegen gar schlimmer Fensterdesigns nicht weiter kommt ... wie lasse ich bestimmte Koordinaten anklicken?Dami123 hat geschrieben:Anstatt Funktionen zum Auslesen des Inhalts zu schreiben, würde es sich, zumindest vom Aufwand her, eher empfehlen bestimmte Bildschirmkoordinaten direkt anzusprechen.
Man speichert die Koordinaten, die angeklickt werden sollen, bei einer bestimmten Auflösung des Softwarefensters.
So könntest du:
- überprüfen ob Programm läuft / starten / Fenstergröße festlegen
- in dict gespeicherte Koordinaten ansprechen