Hallo Leute,
ich benötige Unterstützung bei einem Problem. Kurz zum Hintergrund:
Damit eine aufwendige Simulation schneller durchgeführt wird, wird die Rechenlast auf mehrere Clients verteilt, die jeweils ein Teilstück dieser Simulation berechnen und ihre Ergebnisse an den Master zurückliefern. Dafür startet jeder Client eine Instanz des Simulationsprogramms per Kommandozeile, so dass nur der Rechenkern des Programms gestartet wird OHNE Oberfläche und führt ein programmiertes Makro aus.
Da die Rechenleistung von möglichst vielen Rechnern genutzt werden soll, an denen normal gearbeitet wird, soll der Client möglichst ohne aufpoppende Fenster, Meldung usw. auf dem "Gastrechner" seinen Dienst verrichten. D.h. Komplett unsichtbar!
Das Problem ist folgendes. Das Programm besitzt einen Kommandozeilenparameter mit dem man die Oberfläche abschalten kann. Per AutoIT starte ich eine oder mehrere Clients aus einem Tray Menü heraus mit dem besagten Parameter und der "@SW_HIDE" Option. Wird dem Client jedoch ein Job zugewiesen, erscheint kurz ein "Ladefenster" mit Fortschrittsbalken usw., das natürlich stört, weil es sich schön mittig auf dem Bildschirm platziert und den Fokus auf sich zieht. Dieses Verhalten kann man im Simulationsprogramm selber nicht abstellen, da es sich hierbei um eine selbstprogrammierte Lösung handelt.
Das Problem warum das Fenster nicht automatisch versteckt wird liegt glaube ich daran, dass das Ladefenster von einem anderen Prozess gestartet wird.
Gibt es in Auto IT die Möglichkeit den Client in einem "Eltern"-Prozess versteckt zu starten und alle "Kinder" zu verstecken?
Meine gegenwärtige Lösung ist ein externes Auto IT Skript, das solange wartet bis das besagte Ladefenster erscheint, es versteckt und wieder wartet. Das blöde ist nur, dass auch viele Fenster ungewollt versteckt werden, wenn das Simulationsprogramm normal mit Oberfläche gestartet wird. Ich müsste hier einen Haufen von Ausnahmen einbauen. Außerdem poppt das Ladefenster für den Bruchteil einer Sekunde auf, bevor es verschwindet. Also keine optimale Lösung auf Dauer.
Fenster Verstecken Skript:
While 1
While Not WinExists("[CLASS:QWidget]")
Sleep(10)
WEnd
If WinGetTitle("[CLASS:QWidget]") == "Hauptfenster Name" Then
ContinueLoop
Else
WinSetState("[CLASS:QWidget]", "" ,@SW_HIDE)
EndIf
WEnd
Alles anzeigen
Client Starten Function: