236 votes

Afficher/masquer la fenêtre de console d'une application console C#

J'ai cherché sur Google des informations sur la façon de masquer sa propre fenêtre de console. Étonnamment, les seules solutions que j'ai pu trouver étaient des solutions bricolées impliquant FindWindow() pour trouver la fenêtre de la console par son titre . J'ai creusé un peu plus profondément dans l'API Windows et j'ai découvert qu'il existe une méthode bien meilleure et plus simple. Je voulais donc la publier ici pour que d'autres la trouvent.

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

346voto

Fahad Points 245

Il suffit d'aller dans la page de l'application Propriétés et changer le Type de sortie de Application Console à Application Windows .

0 votes

J'ai l'impression d'être une idiote, ça semble si évident quand on me le fait remarquer. J'ai trouvé ça si difficile à googler.

15 votes

Même si cela ne répond pas à la question de l'OP, j'apprécie vraiment que vous donniez cette réponse. C'est exactement ce dont j'avais besoin :)

9 votes

Ce n'est pas une solution, car de cette façon la fenêtre ne peut pas être affichée.

321voto

Timwi Points 30896

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);

18 votes

La fenêtre apparaît toujours momentanément au début. Je suppose qu'il n'y a aucun moyen de contourner ce problème, à moins de modifier le type d'application ?

3 votes

Ce serait bien s'il y avait un moyen de contourner cela. Ainsi, je pourrais afficher la console lorsque je suis en mode de débogage, mais simplement exécuter mon programme et quitter (sans fenêtre) lorsque je suis en mode d'exécution normal.

9 votes

@Vaccano : Il est possible de faire de votre application une application console en mode Debug uniquement en modifiant le fichier csproj manuellement. Visual Studio ne dispose pas d'une interface graphique pour le faire, mais il honorera le paramètre si vous modifiez le fichier csproj correctement.

22voto

Pourquoi avez-vous besoin d'une application console si vous voulez cacher 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. Elle ne vous montrera pas la fenêtre de la console, mais exécutera toutes les actions, comme le fait l'application Console.

39 votes

Parce qu'il pourrait y avoir un moment où je voudrais vraiment le montrer. Par exemple, l'application console essaie de faire des choses et ne dérange personne tant qu'elle réussit. Sinon, elle s'affiche et me propose une CLI.

0 votes

Également TopShelf vous permet d'exécuter Consoles en tant que service et cela brise cette

0 votes

Si vous voulez que la sortie standard soit disponible dans une console, alors vous aurez besoin d'une console, c'est aussi simple que cela.

13voto

Anthony Points 251

Voir mon post ici :

Afficher la console dans une application Windows

Vous pouvez créer une application Windows (avec ou sans fenêtre) et afficher la console comme vous le souhaitez. Avec 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 dual-mode que je veux exécuter en mode console ou gui selon la façon dont elles sont ouvertes.

1 votes

Excellent ! Le moyen le plus simple de cacher la console est de changer le type de projet en application Windows.

2voto

rag Points 1

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

    [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());

0 votes

Nous devons donner le chemin complet du fichier dll dans DllImport("fullPath") /.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X