2017-11-27 5 views
0

mit Visual Studio 2017.Toggle Kind Prozessfenster Sichtbarkeit in Visual C++, ohne das Kind Neubelebung

Ich benutze

siStartInfo.dwFlags & = STARTF_USESHOWWINDOW;

siStartInfo.wShowWindow = SW_HIDE;

, um einen untergeordneten Prozess (über CreateProcess()) mit einem ausgeblendeten Fenster zu erstellen. Es funktioniert perfekt.

Was ich möchte, wenn möglich, zu Toggle des Sichtbarkeitsstatus der Kind Prozess Fenster nach Schaffung der Lage sein, aus dem Hauptprogramm auf Anfrage (mit einem Knopfdruck, beispielsweise). Ich möchte die Fenstersichtbarkeit des untergeordneten Prozesses steuern, ohne ihn über CreateProcess() erneut zu starten.

Das Ändern des untergeordneten Prozesscodes ist keine Option - es können viele verschiedene Programme mit nicht unbedingt verfügbarem Quellcode sein.

Vielen Dank im Voraus.

+0

'siStartInfo.dwFlags | = STARTF_USESHOWWINDOW;' brauchen – RbMm

+0

unklar, wie 'Visual-Studio' bezogen auf all dies. und Kindprozess kann Startup-Informationen überhaupt ignorieren. – RbMm

+1

Sie müssen das Kindprozessfenster finden und anzeigen. –

Antwort

0

Wenn Sie eine eindeutige Fensterklasse oder einen eindeutigen Titel des untergeordneten Prozesses kennen, können Sie FindWindow() verwenden, um dieses Fenster zu finden.

Für einen allgemeineren Ansatz verwenden Sie , um alle Fenster der obersten Ebene aufzuzählen. Rufen Sie für jedes Fenster GetWindowThreadProcessId() auf, um zu überprüfen, ob es zu dem unterordneten Prozess gehört.

Rufen Sie ShowWindow() auf, um die Sichtbarkeit umzuschalten.

+1

Wenn die generierte App single-threaded ist (oder zumindest das fragliche Fenster zum Hauptthread gehört), sollten Sie erwägen, ['EnumThreadWindows()'] (https://msdn.microsoft.com/en-us/library /windows/desktop/ms633495.aspx) anstelle von 'EnumWindows()' + 'GetWindowThreadProcessId()'. 'CreateProcess()' gibt die Thread-ID des Haupt-Threads des neuen Prozesses zurück. –