Win32-Konsole hervorholen
-
Grüsse zusammen
Nach einem Aufruf eines Dialogs verschwindet meine Konsole irgendwie automatisch im Hintergrund (also hinter alle Ordner und andere Fenster). Hab keine Ahnung wieso. Vielleicht weiss es hier allerdings einer, denn dies wäre die bessere Lösung, in dem man es einfach verhindert.
Die andere Lösung ist, dass man die Konsole dann von alleine wieder hervorholt und an die erste Stelle setzt. Nur habe ich keine Ahnung wie ich das anstellen soll. Hab es über die WinAPI mit GetConsoleWindow() versucht und dann entsprechend entweder SetFocus oder ShowWindow versucht, aber hat nix gebracht. Wie kann ich es denn machen?Danke für die Hilfe.
Grüssli
-
Eine genauere Beschreibung deines Problems, wär ein Hit,
startest du nur die eine Konsolenanwenung oder startest
du das Programm von einem anderen Programm aus,...?mfg,
Helios84
-
helios84 schrieb:
Eine genauere Beschreibung deines Problems, wär ein Hit,
startest du nur die eine Konsolenanwenung oder startest
du das Programm von einem anderen Programm aus,...?Was hat das damit zu tun? Also ich komme bei meiner Fehlerbeschreibung draus, was ist denn nicht klar, ausser der Frage?
Die Antwort lautet übrigens, dass ich eine eigene Win32 Konsolen Anwendung starte. In dieser Anwendung wird dann ein Dialog aufgerufen (CFileDialog aus der MFC) und nach dem Beenden des Dialogs verschwindet die Konsole unter den anderen Fenstern.
Also wenn du z.b. die Anwendung von VS aus startest, dann kommt irgendwann der Dialog, und wenn du ihn schliesst, dann hast du wieder VS vor dir und die Konsole ist hinter dem VS Fenster verschwunden. Durch ein Klick in der Taskbar, hast sie dann wieder zuvorderst.
Oder wenn du z.b. die Anwendung vom Ordner Debug aus startest, dann kommt auch irgendwann der Dialog, und wenn du ihn schliesst, dann ist das Debug-Ordner-Fenster wieder im Vordergrund und die Konsolenanwendung gleich dahinter. Du kannst sie durch einen einfach klick auch hier wieder hervorholen.Ich möchte aber, dass die Konsole erst gar nie dahinter verschwindet. Bzw. ich möchte notfalls eben die Konsole im Code gleich wieder nach dem schliessen des Dialogs nach vorne holen.
Ist das jetzt verständlicher?
Grüssli
-
Immer freundlich bleiben...
Anyways, warum das so ist weiß ich nicht, aber ein ShowWindow(GetConsoleWindow(), SW_SHOW) holt dein Fentser wieder.
MfG SideWinder
-
SideWinder schrieb:
Immer freundlich bleiben...
ICH BIN FREUNDLICH!!!
Nur müde und gereizt
Sorry, wenn es ein wenig barsch da oben rüberkamSideWinder schrieb:
Anyways, warum das so ist weiß ich nicht, aber ein ShowWindow(GetConsoleWindow(), SW_SHOW) holt dein Fentser wieder.
Das habe ich schonmal probiert und es funktionierte nicht. Und habe es soeben nochmals probiert, aber funktioniert nicht.
Habe dafür nun mal folgendes gemacht:
::ShowWindow(GetConsoleWindow(), SW_HIDE); ::ShowWindow(GetConsoleWindow(), SW_SHOW);
So gehts, allerdings verliert dann mein Fenster den Keyboard Input. Und wenn ich noch ein:
::SetFocus(GetConsoleWindow());
Dahinter gesetzt habe, hat es auch nichts gebracht.
Es ist mir ein absolutes Rätsel!
Grüssli
-
Probiere doch mal folgendes :
::EnableWindow (GetConsoleWindow (), false); // deaktiviert die Konsole // hier Dialog aufrufen ::EnableWindow (GetConsoleWindow (), true); // aktiviert sie wieder ::SetActiveWindow (GetConsoleWindow ()); // und setzt sie in den Vordergrund
-
*schüttelt den Kopf* ... funktioniert auch nicht. Das macht doch keinen Sinn, blöde Konsole! ^^
Grüssli
-
Verschwindet die Konsole auch in den Hintergrund wenn der "CFileDialog" noch offen ist ?
Falls ja, dann fehlt dem "CFileDialog" ein "Parent".
Probiere mal dem Dialog als Parent das Handle der Konsole mitzugeben.
-
Nein sie verschwindet erst, wenn CFileDialog geschlossen wird. Bzw. wenn CFileDialog geöffnet wird, geht sie natürlich hinter den Dialog. Wenn das Objekt von CFileDialog allerdings geschlossen wird, dann bekommt sie nicht wieder den Fokus und verschwindet hinter das zuletzt geöffnete Fenster.
Dem CFileDialog Objekt übergebe ich das Handle auf das Consolenfenster bereits. Die Lösung funktioniert somit auch nicht.Grüssli