Grundsätzlich ist es mit AutoIt leicht, ein Programm mit ausgeblendeten bzw. verstecktem Fenster zu starten.

Die einfachste Syntax wäre:

run("Irgendeine.exe", "", @SW_HIDE)

Das funktioniert super, sofern das Programm nur ein Fenster öffnet. Starten allerdings mehrere Fenster z.B. der Reihe nach, so bleibt das Erste zwar versteckt, die nachfolgenden werden allerdings angezeigt.

Das kann man zwar z.B. über

WinSetState("Fenstertitel", "", @SW_HIDE)

weiter eingrenzen, allerdings geschieht diese Änderung mit kurzer Verzögerung. Das bedeutet, das Fenster “blitzt” kurz auf. Kennt man zudem nicht alle nachfolgenden Fenstertitel, wird das Unterbinden der Anzeige unter Umständen unmöglich.

Problematisch kann zudem sein, wenn man ein Fenster über “WinSetState” direkt bzw. kurz nach dem Start einer Anwendung versteckt, das der gesamte Programmstart dann nicht gelingt.

Abhilfe kann schaffen, das Programm auf einem versteckten Desktop zu starten. Diese Lösung fand sich im Forum:

_shellExecuteHidden (allow no windows to become visible)

Als simples AutoIt-Programm habe ich einfach die Funktion zusammen mit den nachfolgenden Zeilen in ein Skript gepackt und als ausführbare Datei kompiliert:

#NoTrayIcon

$CMD = $CmdLine[1]

_shellExecuteHidden($CMD)

; Ab hier kommt die Funktion
...

Hinweis: Ein Download von winapiex ist nicht notwendig, da dieses als UDF in AutoIt mittlerweile enthalten ist.

Die Syntax lautet z.B.:

RunCompletelyHidden.exe C:\Windows\System32\Notepad.exe

Download

Im Archiv ist der Quellcode als auch eine 32- und 64-bit Exe-Datei enthalten:

RunCompletelyHidden.zip

Einschränkungen

Leider ist es mir bislang nicht gelungen, z.B. Text oder überhaupt das Vorhandensein ein auf diese Art ausgeblendeten Fensters/Programms zu ermitteln. Da muss ich dann leider dazusagen, das ich kein Entwickler bin. Falls jemand eine Idee hat, dann raus damit!