Afficher / Masquer la fenêtre de la console d’une application de la console C #

Je cherchais des informations sur la façon de cacher sa propre fenêtre de console. Étonnamment, les seules solutions que j’ai pu trouver étaient des solutions de FindWindow() impliquant FindWindow() pour trouver la fenêtre de la console par son titre . Je me suis plongé un peu plus dans l’API Windows et j’ai découvert qu’il existait un moyen beaucoup plus simple et plus facile, donc je voulais le publier ici pour que les autres puissent le trouver.

Comment cacher (et afficher) la fenêtre de la console associée à ma propre application de console C #?

Voici comment:

 using System.Runtime.InteropServices; 

 [DllImport("kernel32.dll")] static extern IntPtr GetConsoleWindow(); [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); const int SW_HIDE = 0; const int SW_SHOW = 5; 

 var handle = GetConsoleWindow(); // Hide ShowWindow(handle, SW_HIDE); // Show ShowWindow(handle, SW_SHOW); 

Accédez simplement aux propriétés de l’application et modifiez le type de sortie de l’ application console en application Windows .

Pourquoi avez-vous besoin d’une application console si vous souhaitez masquer la console elle-même? =)

Je recommande de définir le type de sortie du projet sur Application Windows au lieu de l’application Console. Il ne vous montrera pas la fenêtre de la console, mais exécutera toutes les actions, comme le font les applications de la console.

Vous pouvez faire l’inverse et définir le type de sortie de l’application sur: Application Windows. Ajoutez ensuite ce code au début de l’application.

 [DllImport("kernel32.dll", EntryPoint = "GetStdHandle", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern IntPtr GetStdHandle(int nStdHandle); [DllImport("kernel32.dll", EntryPoint = "AllocConsole", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern int AllocConsole(); private const int STD_OUTPUT_HANDLE = -11; private const int MY_CODE_PAGE = 437; private static bool showConsole = true; //Or false if you don't want to see the console static void Main(ssortingng[] args) { if (showConsole) { AllocConsole(); IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE); Microsoft.Win32.SafeHandles.SafeFileHandle safeFileHandle = new Microsoft.Win32.SafeHandles.SafeFileHandle(stdHandle, true); FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write); System.Text.Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE); StreamWriter standardOutput = new StreamWriter(fileStream, encoding); standardOutput.AutoFlush = true; Console.SetOut(standardOutput); } //Your application code } 

Ce code affichera la console si showConsole est true

Voir mon post ici:

Afficher la console dans l’application Windows

Vous pouvez créer une application Windows (avec ou sans fenêtre) et afficher la console comme vous le souhaitez. En utilisant cette méthode, la fenêtre de la console n’apparaît jamais, sauf si vous la montrez explicitement. Je l’utilise pour les applications à double mode que je veux exécuter en mode console ou en mode graphique en fonction de la façon dont elles sont ouvertes.

Si vous ne voulez pas dépendre du titre de la fenêtre, utilisez ceci:

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

  IntPtr h = Process.GetCurrentProcess().MainWindowHandle; ShowWindow(h, 0); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FormPrincipale()); 

Si vous ne rencontrez pas de problème lors de l’intégration d’une petite application, il existe ce programme appelé Cmdow.exe qui vous permet de masquer les fenêtres de la console en fonction du titre de la console.

 Console.Title = "MyConsole"; System.Diagnostics.Process HideConsole = new System.Diagnostics.Process(); HideConsole.StartInfo.UseShellExecute = false; HideConsole.StartInfo.Arguments = "MyConsole /hid"; HideConsole.StartInfo.FileName = "cmdow.exe"; HideConsole.Start(); 

Ajoutez l’exe à la solution, définissez l’action de génération sur “Contenu”, définissez l’option Copier dans le répertoire de sortie sur ce qui vous convient et cmdow masquera la fenêtre de la console lors de son exécution.

Pour rendre la console à nouveau visible, il vous suffit de modifier les arguments

 HideConsole.StartInfo.Arguments = "MyConsole /Vis";