Frage

Ich schreibe eine Web-Test-Framework für Windows, die mehrere Browser zu testen Web-Anwendungen verwendet. Ich möchte den Browser versteckt starten, aber es funktioniert nicht.

Ich bin Createprocess mit den Browsern mit der SW_HIDE Flagge starten

STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
CreateProcess(NULL, const_cast<char*> (cmd.c_str()) , NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

Es funktioniert gut für Internet Explorer und andere Anwendungen, aber nicht mit Firefox und anderen Browsern. Ich bin mir bewusst, dass ein Prozess der Lage ist, zu entscheiden, ob oder nicht den übergebenen Flags zu folgen. Gibt es eine Möglichkeit, es erzwingen kann versteckt starten?

kann ich wahrscheinlich bis in die Fenster zeigt warten und verstecken es dann durch einen Griff an das offene Fenster zu bekommen. Aber ich bin auf der Suche nach saubereren Lösung.

War es hilfreich?

Lösung

Das Problem ist, dass der Wert von wShowWindow nur verwendet, wenn die Funktion ShowWindow mit dem Befehl SW_SHOWDEFAULT genannt wird, zusätzlich als FastAl sagte der Browser einige zusätzliche Prozess schaffen zusätzliche Aufgaben zu tun.
Basierend auf Sie Idee und die Antwort von FastAl, können Sie dies tun, um die Fenster durch den Prozess erstellt zu verbergen, dass Sie erstellt:
1.- erstellen Liste des Prozesses mit: CreateToolhelp32Snapshot, Process32First, Process32Next und CloseHandle; nur den Prozess nehmen, die durch den Prozess erstellt wurde, dass Sie erstellt haben. Hier ist ein demostration, wie man verwende diese Funktionen, es funktioniert mit jeder Windows-Version mit Ausnahme von Windows NT.
2.- Verwendung EnumWindows aufzuzählen die Fenster auf dem Bildschirm und mit GetWindowThreadProcessId Prüfen, ob die Fenster durch eines der Verfahren gewonnen in dem vorherigen Schritt erzeugt wurde.
3.- Wenn die Fenster von einem des Prozesses in dem Schritt 1 definiert geschaffen wurden; verstecken die Fenster die Showwindow-Funktion.
Sie können den Prozess überwachen, indem Sie erstellt und prüfen, ob neue Verfahren / Fenster erstellt werden.

Andere Tipps

Sie können die Prozesse von einem Dienst gestartet (läuft als NETWORK SERVICE Benutzer zum Beispiel). Dies wird verhindern, dass sie jede UI zeigt. Es wird Sie jedoch verhindern, daß überhaupt an der ui zu suchen, auch wenn Sie zu einem späteren Zeitpunkt zu wollen.

Eine andere Möglichkeit wäre etwas mit Arbeitsstationen und Desktops zu tun, werfen Sie einen Blick auf die Abschnitt über Fensterstationen und Desktops auf MSDN . Eine Idee wäre zu benutzen Create und dann diese Angabe Desktop als lpDesktop Parameter in der Struktur zu STARTUPCreate gegeben. Wenn Sie zu einem späteren Zeitpunkt die Benutzeroberfläche angezeigt werden sollen, verwenden Sie

try si.wShowWindow = 0; lustig für mich gearbeitet, nicht SW_HIDE die zwar den gleichen Wert führen sollte.

Nach MSDN , sieht aus wie Sie benötigen diese Flagge in dwFlags passieren.

STARTF_USESHOWWINDOW 0x00000001 - The wShowWindow member contains additional information.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top