ホームページ >バックエンド開発 >C++ >オレンジなどのカスタム色を C# コンソール アプリケーションに追加するにはどうすればよいですか?

オレンジなどのカスタム色を C# コンソール アプリケーションに追加するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-03 10:48:40667ブラウズ

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

C# コンソール アプリケーションのカスタム カラー

C# コンソール アプリケーションでは、デフォルトのコンソール カラーを超えてフォントの色をカスタマイズできる機能は貴重な機能です。残念ながら、利用可能な色のリストは限られており、目的のオレンジ色がありません。

カスタム カラーの利用可能なオプション

提供されている色のリストは、サポートされている公式セットです。コンソールでカスタム カラーを実現する方法があります:

  • 外部の使用ライブラリ: 専用のライブラリを統合して、コンソールの機能を拡張し、より幅広いカラー パレットを提供できます。そのようなライブラリの 1 つが ConsoleTools です。
  • 低レベル PINVOKE: このメソッドには、Windows API に直接アクセスしてコンソール バッファ属性を操作することが含まれます。カラー管理をより詳細に制御できますが、システムレベルのプログラミングを深く理解する必要があります。

プログラムによるコンソールの色の変更

方法を選択したらカスタム カラーのサポートについては、C# で色の変更を実装できます。プログラム:

  • 外部ライブラリ メソッド:

    • ConsoleTools ライブラリをインストールします。
    • ColorfulConsole の新しいインスタンスを作成します.
    • BackgroundColor と前景色を使用して背景色と前景色を設定します。 ForegroundColor プロパティ。
  • PINVOKE メソッド:

    • GetConsoleScreenBufferInfoEx を使用して既存のコンソール バッファー情報を取得します。
    • 目的のカラー属性を変更します。 color.
    • SetConsoleScreenBufferInfoEx を使用して新しいバッファ情報を設定します。

PINVOKE を使用した特定の実装

提供されたコードスニペットは、PINVOKE メソッドを使用してカスタム カラーを設定する方法を示しています。オレンジを含む:

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

このメソッドを使用すると、オレンジを含む任意の色をコンソールの前景色または背景色として設定でき、C# コンソール アプリケーションでより豊かでカスタマイズ可能なユーザー エクスペリエンスを提供できます。

以上がオレンジなどのカスタム色を C# コンソール アプリケーションに追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。