Bildschirminhalt erkennen und Maus/Tastaturbew. steuern?

Du hast eine Idee für ein Projekt?
Antworten
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

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?
BlackJack

@Judge: So direkt mit Bordmitteln nicht aber es gibt Module für so etwas. pywinauto fällt mir da so spontan ein.
Benutzeravatar
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
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

BlackJack hat geschrieben:@Judge: So direkt mit Bordmitteln nicht aber es gibt Module für so etwas. pywinauto fällt mir da so spontan ein.
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 besser :)
Danke dafür schonmal!
Hyperion hat geschrieben:Für Windows solltest ihr euch mal Ranorex angucken!
Da steht nur was von einer C# und VB.NET API - was bringt das für Python?

Soviel schonmal (in Rekordzeit - WOW :) ) zur Eingabensteuerung ... wie sieht es mit dem "ablesen" des Bildschirminhaltes aus? Gibt es da auch Möglichkeiten / Tipps?
BlackJack

@Judge: Was willst Du denn ablesen? Irgendetwas was man mit `pywinauto` nicht ansprechen kann? Man kann damit ja nicht nur Eingaben tätigen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Judge hat geschrieben: Da steht nur was von einer C# und VB.NET API - was bringt das für Python?
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: Soviel schonmal (in Rekordzeit - WOW :) ) zur Eingabensteuerung ... wie sieht es mit dem "ablesen" des Bildschirminhaltes aus? Gibt es da auch Möglichkeiten / Tipps?
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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Rainier
User
Beiträge: 19
Registriert: Mittwoch 22. August 2007, 10:03

Mir würde http://www.sikuli.org/ einfallen
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

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.
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.
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 ... .
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

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
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

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
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?
Nikolaij
User
Beiträge: 16
Registriert: Montag 1. Juni 2015, 16:22

Ich würde mir mal pymouse anschauen da kann man genz einfach verschiedene Maus-Aktionen durchführen.
Antworten