Maison >développement back-end >C++ >Comment puis-je ajouter des couleurs personnalisées, comme l'orange, à mon application console C# ?

Comment puis-je ajouter des couleurs personnalisées, comme l'orange, à mon application console C# ?

DDD
DDDoriginal
2025-01-03 10:48:40677parcourir

How can I add custom colors, like orange, to my C# console application?

Couleurs personnalisées dans les applications de console C#

Dans les applications de console C#, la possibilité de personnaliser les couleurs de police au-delà des couleurs par défaut de la console est une fonctionnalité précieuse . Malheureusement, la liste des couleurs disponibles est limitée, il manque la couleur orange souhaitée.

Options disponibles pour les couleurs personnalisées

Bien que la liste de couleurs fournie soit l'ensemble officiel pris en charge par la console, il existe un moyen d'obtenir des couleurs personnalisées :

  • Utilisation de bibliothèques externes : Des bibliothèques spécialisées peuvent être intégrées pour étendre les capacités de la console et fournir une palette de couleurs plus large. L'une de ces bibliothèques est ConsoleTools.
  • PINVOKE de bas niveau : Cette méthode implique d'accéder directement aux API Windows pour manipuler les attributs du tampon de la console. Il permet plus de contrôle sur la gestion des couleurs, mais nécessite une compréhension approfondie de la programmation au niveau du système.

Modification des couleurs de la console par programmation

Une fois que vous avez choisi une méthode pour une prise en charge des couleurs personnalisées, vous pouvez implémenter des changements de couleur dans votre programme C# :

  • Bibliothèque externe Méthode :

    • Installez la bibliothèque ConsoleTools.
    • Créez une nouvelle instance de ColorfulConsole.
    • Définissez les couleurs d'arrière-plan et de premier plan à l'aide des propriétés BackgroundColor et ForegroundColor.
  • PINVOKE Méthode :

    • Obtenez les informations de tampon de console existantes à l'aide de GetConsoleScreenBufferInfoEx.
    • Modifiez les attributs de couleur de la couleur souhaitée.
    • Définissez les nouvelles informations de tampon à l'aide SetConsoleScreenBufferInfoEx.

Implémentation spécifique à l'aide de PINVOKE

L'extrait de code fourni montre comment utiliser la méthode PINVOKE pour définir des couleurs personnalisées, notamment orange :

using System;
using System.Drawing;
using System.Runtime.InteropServices;

public class CustomConsoleColors
{
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe);

    [StructLayout(LayoutKind.Sequential)]
    private struct COORD
    {
        public short X;
        public short Y;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct SMALL_RECT
    {
        public short Left;
        public short Top;
        public short Right;
        public short Bottom;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct CONSOLE_SCREEN_BUFFER_INFO_EX
    {
        public int cbSize;
        public COORD dwSize;
        public COORD dwCursorPosition;
        public ushort wAttributes;
        public SMALL_RECT srWindow;
        public COORD dwMaximumWindowSize;
        public ushort wPopupAttributes;
        public bool bFullscreenSupported;
        public uint black;
        public uint darkBlue;
        public uint darkGreen;
        public uint darkCyan;
        public uint darkRed;
        public uint darkMagenta;
        public uint darkYellow;
        public uint gray;
        public uint darkGray;
        public uint blue;
        public uint green;
        public uint cyan;
        public uint red;
        public uint magenta;
        public uint yellow;
        public uint white;
    }

    public static void SetColor(ConsoleColor color, Color targetColor)
    {
        CONSOLE_SCREEN_BUFFER_INFO_EX csbe = new CONSOLE_SCREEN_BUFFER_INFO_EX();
        csbe.cbSize = Marshal.SizeOf(csbe);
        IntPtr hConsoleOutput = GetStdHandle(-11);
        if (hConsoleOutput == new IntPtr(-1))
            throw new Exception("Error retrieving console buffer handle");
        if (!GetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe))
            throw new Exception("Error retrieving console buffer info");

        switch (color)
        {
            case ConsoleColor.Black:
                csbe.black = ColorTranslator.ToWin32(targetColor);
                break;
            case ConsoleColor.DarkBlue:
                csbe.darkBlue = ColorTranslator.ToWin32(targetColor);
                break;
            // ... (similar code for other colors)
            case ConsoleColor.DarkYellow:
                csbe.darkYellow = ColorTranslator.ToWin32(targetColor);
                break;
            case ConsoleColor.Gray:
                csbe.gray = ColorTranslator.ToWin32(targetColor);
                break;
            // ... (similar code for other colors)
            case ConsoleColor.White:
                csbe.white = ColorTranslator.ToWin32(targetColor);
                break;
        }

        if (!SetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe))
            throw new Exception("Error setting console buffer info");
    }

    public static void Main()
    {
        SetColor(ConsoleColor.DarkYellow, Color.Orange);
        Console.WriteLine("Custom orange color applied!");
        Console.ReadLine();
    }
}

En utilisant cette méthode, vous pouvez définir n'importe quel couleur, y compris l'orange, comme couleur de premier plan ou d'arrière-plan de la console, offrant une expérience utilisateur plus riche et personnalisable dans vos applications de console C#.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn