erstmal ein großes Lob für die Mühe und den Aufwand, der hinter der Nutzung von uia_functions steckt! diese Methode ist definitiv eine durchdachte und leistungsstarke Möglichkeit, das Programm zu steuern.
Die Struktur und Möglichkeiten, die damit geboten werden, sind beeindruckend.
Es hört sich nach viel Arbeit an, er kann wenn er will ja auch beide Methoden vereinen.
den ich habe zum Beispiel keine Ahnung wie ich die Subfenster größer/kleiner machen kann, oder bzw. verschieben.
ich weiß nicht wie man das innerhalb des Programms zurechtschieben kann, falls ein Nutzer auf die idee kam die fenster mal zu verschieben.
Da wäre uia bestimmt sehr nützlich wenn man es versteht ich habs bisher noch nicht verstanden.
Die dinge die du innerhalb der Sub- Fenster erreichen willst sind immer fest
- Eine Möglichkeit die ich mir gedacht habe man belässt die Fenster so wie sie beim ersten start waren, wenn dann ein Fenster befüllt werden soll wird es innerhalb des programmes maximiert und die statischen elemente im subfenster dann per mouseclick angeklickt und per controllbefehen ausgefüllt und bestätigt.
Wie gesagt leider hänge ich an den Fenstergrößen/Anordnung innerhalb des Programms. Es gibt zwar diesen einen reiter im ribbon menu aber das ist ja nicht zu 100% immer identisch (kommt auf den nutzer drauf an, ich als nutzer musste natürlich an den fenster größen spielen ^^) ich schätze das müsste man auch mit uia lösen wenn man diesen menü punkt nutzen möchte.
oder diese ribbon udf? keine Ahnung hab ich auch noch nie mit gearbeitet.
Allerdings sobald sich ein Menüpunkt öffnet, lassen sich die darin enthaltenen Steuerelemente ganz einfach mit ControlClick, ControlSetText oder ähnlichen AutoIt-Befehlen bedienen. Das würde dir etwas Arbeit sparen deshalb der Vorschlag beide Vorschläge zu verwenden und nicht alles bis aufs kleinste zu objektisieren^^.
Der Vorteil dabei ist, dass alle Fenster und Steuerelemente, die sich öffnen lassen, durch das AutoIt-Info-Tool leicht ausgelesen werden können. Dadurch ist die Steuerung nicht nur unkompliziert, sondern auch sehr direkt. Besonders praktisch ist, dass Eingabefelder, Buttons und andere Elemente so gezielt angesprochen werden können.
Schnuffel – Danke nochmal für die Aufarbeitung, die in der anderen uia-Methoden steckt – sie ist sicherlich in vielen Szenarien unverzichtbar! Leider für Menschen die damit noch nicht gearbeitet haben schwer zu durchschauen.
Aber hier habt ihr meine Variante bisher : (die Ordnerstrucktur : @ScriptDir & "\ROPEXvisual 2.0 540000311\RopexVisualLaunch.exe ) mit Debug Zeilen zum schritte kontrollieren. @edit: mache morgen weiter hab grad noch ne Möglichkeit gesehen evtl. geht es.
Opt("MouseCoordMode", 2) ; Relative zum aktiven Fenster
Global $Debug = True ; Debug-Modus: True = Langsamer mit Debug-Meldungen, False = Normal
; Funktion: Debug-Meldungen und Pausen
Func DebugMsg($message)
If $Debug Then
MsgBox(64, "Debug", $message)
ConsoleWrite("Debug :"& $message &"sleep 0,5sec"&@CRLF)
Sleep(500) ; 500ms Pause für visuelle Verfolgung
EndIf
EndFunc
; Funktion: Programm starten
Func StartProgram()
Local $programPath = @ScriptDir & "\ROPEXvisual 2.0 540000311\RopexVisualLaunch.exe"
If Not FileExists($programPath) Then
MsgBox(16, "Fehler", "Programm nicht gefunden: " & $programPath)
Exit
EndIf
DebugMsg("Starte Programm: " & $programPath)
Run($programPath)
DebugMsg("Warte auf Fenster: ROPEXvisual® V3.11 - Controller.Parameter.Konfiguration")
; Warten, bis das Hauptfenster verfügbar ist
WinWait("ROPEXvisual® V3.11", "", 15) ; Max. 15 Sekunden warten
If Not WinExists("ROPEXvisual® V3.11") Then
MsgBox(16, "Fehler", "Das Programm konnte nicht gestartet werden.")
Exit
EndIf
; Fenster aktivieren und maximieren
DebugMsg("Fenster gefunden, aktiviere und maximiere")
WinActivate("ROPEXvisual® V3.11 - Controller.Parameter.Konfiguration")
WinSetState("ROPEXvisual® V3.11 - Controller.Parameter.Konfiguration", "", @SW_MAXIMIZE)
EndFunc
; Funktion: Sprache ändern
Func ChangeLanguage()
DebugMsg("Klicke auf Settings mit MouseClick")
MouseClick("left", 149, 53) ; Koordinaten für Settings
DebugMsg("Klicke auf Language mit MouseClick")
MouseClick("left", 361, 88) ; Koordinaten für Language
DebugMsg("Warte auf Dialog: Language selection")
WinWait("Language selection", "", 5)
If Not WinExists("Language selection") Then
MsgBox(16, "Fehler", "Der Dialog für die Sprachauswahl konnte nicht geöffnet werden.")
Exit
EndIf
; Sprache auswählen
DebugMsg("Wähle Sprache: Deutsch")
ControlCommand("Language selection", "", "ComboBox1", "SelectString", "Deutsch")
; Klicke auf OK
DebugMsg("Klicke auf OK")
ControlClick("Language selection", "", "Button1")
; Warten, bis das Hauptfenster wieder aktiv ist
DebugMsg("Warte auf Rückkehr zum Hauptfenster")
WinWaitActive("ROPEXvisual® V3.11 - Controller.Parameter.Konfiguration", "", 5)
EndFunc
; Funktion: Freigabe aktivieren
Func EnableAuthorization()
DebugMsg("Klicke auf Menü 'Einstellungen'")
MouseClick("left", 149, 53) ; Koordinaten für Einstellungen
DebugMsg("Klicke auf Schaltfläche 'Freigabe'")
MouseClick("left", 315, 93) ; Koordinaten für Freigabe
DebugMsg("Warte auf Passwort-Dialog")
WinWait("Zugangsberechtigung", "", 5)
If Not WinExists("Zugangsberechtigung") Then
MsgBox(16, "Fehler", "Der Dialog für die Zugangsberechtigung konnte nicht geöffnet werden.")
Exit
EndIf
DebugMsg("Gebe Passwort ein: ropex3")
ControlSetText("Zugangsberechtigung", "", "Edit1", "ropex3") ; Passwort eingeben
DebugMsg("Klicke auf OK im Passwort-Dialog")
ControlClick("Zugangsberechtigung", "", "Button1") ; OK klicken
DebugMsg("Warte auf Rückkehr zum Hauptfenster")
WinWaitActive("ROPEXvisual® V3.11 - Controller.Parameter.Konfiguration", "", 5)
DebugMsg("Freigabe erfolgreich aktiviert.")
EndFunc
; Hauptprogramm
StartProgram()
ChangeLanguage()
EnableAuthorization()
Alles anzeigen