Maison > développement back-end > C++ > Comment puis-je afficher des couleurs personnalisées (comme l'orange) dans mon application console C# ?

Comment puis-je afficher des couleurs personnalisées (comme l'orange) dans mon application console C# ?

Mary-Kate Olsen
Libérer: 2025-01-02 17:25:40
original
632 Les gens l'ont consulté

How Can I Display Custom Colors (Like Orange) in My C# Console Application?

Texte coloré dans les applications de console

L'énumération ConsoleColor intégrée fournit une sélection limitée de couleurs de texte pour les applications de console C#. Cependant, il peut arriver que vous souhaitiez une couleur spécifique, telle que l'orange, qui n'est pas incluse.

Limitations de l'énumération ConsoleColor

L'énumération ConsoleColor répertorie le texte pris en charge couleurs, qui sont :

Black
DarkBlue
DarkGreen
DarkCyan
DarkRed
DarkMagenta
DarkYellow
Gray
DarkGray
Blue
Green
Cyan
Red
Magenta
Yellow
White
Copier après la connexion

Comme vous pouvez le constater, l'orange n'est pas présent dans cet ensemble de couleurs.

Couleur de texte personnalisée via P/Invoke

Pour obtenir des couleurs de texte personnalisées, nous pouvons nous plonger dans les domaines de l'invocation de plate-forme (P/Invoke). En utilisant la fonction SetConsoleScreenBufferInfoEx() de la bibliothèque kernel32.dll, nous pouvons manipuler directement les paramètres de couleur de la console.

Tout d'abord, définissez les structures de données nécessaires :

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

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

[StructLayout(LayoutKind.Sequential)]
internal struct COLORREF
{
    public uint ColorDWORD;
    
    public COLORREF(Color color)
    {
        ColorDWORD = (uint) color.R + (((uint) color.G) << 8) + (((uint) color.B) << 16);
    }
}

[StructLayout(LayoutKind.Sequential)]
internal 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;
    ...
}
Copier après la connexion

Ensuite, importez le fonctions requises à partir de kernel32.dll :

[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr GetStdHandle(int nStdHandle);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool GetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe);
Copier après la connexion

Définition personnalisée Couleurs

Avec ces outils, nous pouvons désormais définir des méthodes pour définir des couleurs spécifiques de la console, y compris l'orange :

public static int SetColor(ConsoleColor consoleColor, Color targetColor)
{
    // Fetch console details
    CONSOLE_SCREEN_BUFFER_INFO_EX csbe = new CONSOLE_SCREEN_BUFFER_INFO_EX();
    csbe.cbSize = (int)Marshal.SizeOf(csbe);
    IntPtr hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    bool brc = GetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);
    if (!brc)
        return Marshal.GetLastWin32Error();

    // Set the specified color component
    switch (consoleColor)
    {
        case ConsoleColor.Black:
            csbe.black = new COLORREF(targetColor);
            break;
        ...
        // Other colors defined similarly
    }
    
    // Apply the Color
    brc = SetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);
    if (!brc)
        return Marshal.GetLastWin32Error();
    
    return 0;
}

public static int SetScreenColors(Color foregroundColor, Color backgroundColor)
{
    int irc = SetColor(ConsoleColor.Gray, foregroundColor);
    if (irc != 0) return irc;
    irc = SetColor(ConsoleColor.Black, backgroundColor);
    return irc;
}
Copier après la connexion

Voyons maintenant un exemple de SetScreenColors en action :

static void Main(string[] args)
{
    Color screenTextColor = Color.Orange;
    Color screenBackgroundColor = Color.Black;
    SetScreenColors(screenTextColor, screenBackgroundColor);
    
    Console.WriteLine("Hello World!");
    Console.ReadKey();
}
Copier après la connexion

En utilisant la méthode ci-dessus, vous pouvez définir les couleurs de premier plan et d'arrière-plan de votre console sur n'importe quelle valeur RVB souhaitée, y compris l'orange. Profitez de la personnalisation de la sortie de votre console !

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal