Afficher / masquer la fenêtre de la console D'une application c # console

j'ai cherché sur Google 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 hacky qui impliquaient FindWindow() pour trouver la fenêtre de console par son titre . J'ai creusé un peu plus profondément dans l'API de Windows et il est beaucoup mieux et plus facilement, donc j'ai voulu le poster ici pour que les autres à trouver.

Comment cacher (et afficher) la fenêtre de la console associée à la mienne C # Application console?

148
demandé sur Timwi 2010-08-26 06:19:37

7 réponses

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);
204
répondu Timwi 2013-01-21 15:11:16

allez simplement aux" propriétés de l'application et changez le "type de sortie 151910920" de Application Console en application Windows .

203
répondu Fahad 2017-10-02 15:28:55

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 à 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 la Console application do.

21
répondu Oleksandr Pshenychnyy 2012-08-15 14:42:20

vous pouvez faire l'inverse et définir le type de sortie de L'Application à: Windows Application. Puis ajoutez 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(string[] 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

13
répondu Maiko Kingma 2017-11-20 14:14:27

Voir mon billet ici:

Afficher la Console sous Windows de l'Application

vous pouvez faire une application Windows (avec ou sans la 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 à moins que vous ne l'affichiez explicitement. Je l'utilise pour les applications en mode double que je veux exécuter en mode console ou gui selon la façon dont elles sont ouvertes.

9
répondu Anthony 2017-05-23 10:31:37

si vous ne voulez pas dépend du titre de la fenêtre utiliser 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());
1
répondu rag 2013-06-28 07:34:41

Si vous n'avez pas de problème à intégrer une petite application par lot, il y a ce programme appelé Cmdow.exe qui vous permettra de cacher des fenêtres de console basées sur le 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 compilation à "Content", définissez le répertoire de copie à sortie à ce qui vous convient, et cmdow masquera la fenêtre de la console quand elle sera lancée.

pour rendre la console à nouveau visible, il suffit changer les Arguments

HideConsole.StartInfo.Arguments = "MyConsole /Vis";
0
répondu ScilsOff 2015-03-27 15:30:47