Fenster erkennen und wegklicken

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ollom
User
Beiträge: 10
Registriert: Montag 6. Mai 2019, 12:50

Hallo,

ich möchte mit meinem Programm gern erkennen ob ein bestimmtes Fenster (FehlermeldungXY) aufgegangen ist und dieses dann über den OK Butten schließen.

Ich dachte an eine Schleife, die dauerhaft prüft ob ein bestimmter Fenstername/ Prozess in Windows auftaucht. Wenn dieses Fenster gefunden wurde soll dorthin gewechselt werden und meinetwegen mit dem TAB so lange die Kästchen weitergeschaltet werden bis der OK Button kommt und diesen dann betätigen. Die Anzahl der Tab Betätigungen würde ich vorher abzählen.

Mit welchem Package kann man soetwas programmieren?
Bei meinen bisherigen Suche kam ich leider immer nur zu tkinter und Co, wo man selber GUIs erstellen kann aber nicht bestehende steuern kann. :?

Hättet ihr eine Idee :idea: für mich?
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Ollom
User
Beiträge: 10
Registriert: Montag 6. Mai 2019, 12:50

Genau so etwas habe ich gesucht. Vielen Dank!!!
Ollom
User
Beiträge: 10
Registriert: Montag 6. Mai 2019, 12:50

Alles geht mit dem PyAutoGUI leider nicht. Für das Schließen von Fenstern braucht man noch das OS Package.. Nur falls das hier noch mal jemand liest....
Ollom
User
Beiträge: 10
Registriert: Montag 6. Mai 2019, 12:50

Hallo

Ich hatte das Thema lange beiseite gelegt, da ich nicht weiter kam und wollte es jetzt erneut angehen.

Ich kann mittlerweile aktive *.exe Files im Taskmanager finden.

Code: Alles auswählen

import psutil

for p in psutil.process_iter(attrs=['pid', 'name']):
    if "notepad++.exe" in (p.info['name']).lower():
        print("Habe ich gefunden", (p.info['name']).lower())
Das hilft mir aber immer noch nicht das "SpeichernUnter" Dialogfenster vom Notepad zu finden. Hat jemand eine Idee oder kann ein Minibeispiel einstellen, wie man solche Fenster findet und diese abbricht oder schließt.
Benutzeravatar
sparrow
User
Beiträge: 4184
Registriert: Freitag 17. April 2009, 10:28

Vielleicht möchtest du dir einmal pywinauto anschauen.
Ollom
User
Beiträge: 10
Registriert: Montag 6. Mai 2019, 12:50

Ok, ich habe mich jetzt eine Weile mit pywinauto befasst und wollte für alle die auf das gleiche Problem stoßen hier mal eine Lösung zeigen.

Als Versuchsobjekt habe ich das Notepad geöffnet und den Dialog "Speichern unter" offen.

Wenn ich den folgenden Code in der Console ausführe erhalte ich die Unterpunkte vom Notepad.

Code: Alles auswählen

from pywinauto.application import Application

app = Application().connect(path=r"C:\Windows\System32\notepad.exe")

# Anzeige der Unterpunkte vom Notepad
dialogs = app.windows()
print(dialogs)

# Anzeige der Bedienelemente von Speichern unter
SaveAsWindow = app[u'Speichern unter']
SaveAsWindow.print_control_identifiers()
Mit dem Befehl

Code: Alles auswählen

print_control_identifiers()
finde ich auch den Abbrechen Button im Rückgabewert

Code: Alles auswählen

...
   | child_window(title="&Speichern", class_name="Button")
   | 
   | Button - 'Abbrechen'    (L2964, T741, R3052, B767)
   | ['AbbrechenButton', 'Abbrechen', 'Button3']
   | child_window(title="Abbrechen", class_name="Button")
   | 
   | ScrollBar - ''    (L3052, T762, R3069, B779)
   | ['AbbrechenScrollBar', 'ScrollBar3']
   | child_window(class_name="ScrollBar")
   | 
   | Static - ''    (L2242, T227, R2758, B244)
   | ['Speichern unterStatic', 'Static3', 'Speichern unterStatic0', 'Speichern unterStatic1']
   | child_window(class_name="Static")
...
Da man diese Informationen nun hat kann man mit dem Befehl

Code: Alles auswählen

app[u'Speichern unter'][u'Abbrechen'].click()
ganz einfach das Fenster abbrechen. 8) Diese Erkenntniss hat mich nur 2 Tage gekostet :x
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ollom: Du verwendet da aber nicht mehr Python 2 oder? Die u vor den Zeichenketten sollten da nicht stehen, insbesondere sollte Python die nie *ausgeben*, denn dann ist es Python 2.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ollom
User
Beiträge: 10
Registriert: Montag 6. Mai 2019, 12:50

Nein ich verwende kein Python 2 und du hast recht, es funktioniert auch wunderbar ohne das u :shock:
Antworten