C# Console Ein und Ausblenden

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
799
Hallo zusammen,

ich hab gerade eine Anwendung, bei welcher ich die Konsole ein und ausblenden möchte.
Dies scheint mir schwerer als gedacht zu sein.

Man kann zwar mit einem DLL Import und AllocConsole und Freeconsole die Console erst
einblenden und dann auch ausblenden. Wenn Sie dann aber wieder eingeblendet wird,
nach dem FreeConsole aufgerufen wurde, gibt es eine Exception, sobald man drauf
schreiben will. Scheinbar wird das Fenster zerstört und nicht einfach nur ausgeblendet.

Weiß jemand, wie man das Fenster ein und ausblenden kann?

Viele Grüße Ruff
 
Zuletzt bearbeitet: (...die Exception lautet übrigens "Das Handle ist ungültig")
Bei deinen ganzen häppchenweisen Fragen drängt sich mir immer mehr die Frage auf, ob die Konsole für dich überhaupt geeignet ist. Mir kommt sie eher wie ein Hindernis vor, das du dir selbst hingestellt hast, an dem du nicht vorbei kommst, es aber unbedingt behalten willst. Deshalb machst du ein paar Polster dran, damit es nicht so weh tut, wenn du zum 50. Mal drüber stolperst.

Ist die Umsetzung als Konsolenanwendung wirklich erforderlich? Warum machst du nicht ein eigenes Fenster auf, in das du Text werfen kannst und das du komplett unter der eigenen Kontrolle hast? Dann kannst du Knöpfchen an und aus machen und eigene rein malen und du kannst es ein- und ausblenden, wie du Lust hast.

Die Konsole ist dafür gedacht, ein simples User Interface zu haben, bei dem man sich nicht um Window Management kümmern muss. Und die letzten gefühlten 72 Monate kommt von dir eine Frage nach der Anderen über Window Management. :/
 
Zuletzt bearbeitet:
Könnte man machen. Wär der schnelle und einfache weg. Dann wär für mich aber ein gewisser Reiz weg, da ich gerne eine Consolenanwendung machen möchte und alles andere gelöst bekommen hab. Dann wird jetzt der letze Punkt ein einfaches Ein und Ausblenden auch noch zu lösen sein. Das kann nichts großes sein... nur manchmal sieht man den Wald vor lauter Bäumen nicht mehr :-)
Ergänzung ()

...ich hab die Lösung.

AllocConsole zum generellen Einblenden
FreeConsole zum zerstören der Console

[DllImport("Kernel32.dll")]
private static extern void AllocConsole();

[DllImport("Kernel32.dll")]
private static extern void FreeConsole();

#################################################



[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);


Zum Ausblenden:

ShowWindow(handle, 0);



Zum Einblenden:

ShowWindow(handle, 5);
Ergänzung ()

Hier nochmal etwas übersichtlicher:

#region Console einblenden und ausblenden

[DllImport("Kernel32.dll")]
private static extern void AllocConsole(); //Console einblenden
[DllImport("Kernel32.dll")]
private static extern void FreeConsole(); //Console zerstören
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr consoleWindow, int hide_show);
private const int showConsole = 5;
private const int hideConsole = 0;

//Verwendung:
//AllocConsole(); Console erstmalig Einblenden
//IntPtr consoleWindow = FindWindow(null, Console.Title);
//ShowWindow(consoleWindow, hideConsole); Console verstecken
//ShowWindow(consoleWindow, showConsole); Console einblenden

#endregion
 
Zurück
Oben