[c#] Orange Textfarbe in der C # -Konsolenanwendung?



Answers

[Schamlose Eigenwerbung]

Ich arbeite an einem Projekt, mit dem Sie die Konsolenausgabe in jeder System.Drawing.Color formatieren können, einschließlich Orange. Hier ist, wie Sie es tun würden:

Console.WriteLine("writing to the console in orange", Color.Orange);

Projekt: http://colorfulconsole.com/

Question

Ich habe gerade meinen C # -Konsolenanwendungscode für ein Projekt fertiggestellt und möchte etwas Farbe zu meiner Schriftart hinzufügen. Ich würde gerne die Farbe Orange verwenden können. Gibt es eine Möglichkeit, dies zu tun?

Dies ist der Code, den ich verwendet habe, um Farben in der Vergangenheit zu ändern, aber er bietet kein Orange an:

Console.ForegroundColor = ConsoleColor.Magenta(and so on);

Gibt es eine Möglichkeit, vielleicht einen Hex-Wert für die Farbe oder etwas ähnliches einzufügen?




Besser spät als nie, aber es scheint, dass dies jetzt möglich ist, auf Vista und später zumindest. Also werde ich das für zukünftige Referenz für andere mit der gleichen Frage hinzufügen.

Als ich danach suchte, stieß ich auf Hans Passants Antwort auf MSDN :

Ich habe momentan keinen Zugang zu Vista und kann es nicht ausprobieren. Aber so etwas sollte funktionieren:

CONSOLE_SCREEN_BUFFER_INFOEX info;
info.cbSize = sizeof(info);
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfoEx(hConsole, &info);
info.ColorTable[14] = RGB(255, 128, 0);  // Replace yellow
SetConsoleScreenBufferInfoEx(hConsole, &info);
SetConsoleTextAttribute(hConsole, FOREGROUNDINTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);

Es wird ein bisschen p-Invoking brauchen, aber sollte dir etwas geben, mit dem du weitermachen kannst.




Ein weiterer Beweis, dass dies nicht funktioniert (mit dem Ansatz in Benjamins Link):

using System.Runtime.InteropServices;

namespace
{
    class Program
    {
        [DllImport("kernel32.dll")]
        public static extern bool SetConsoleTextAttribute(IntPtr hConsoleOutput, int wAttributes);
        [DllImport("kernel32.dll")]
        public static extern IntPtr GetStdHandle(uint nStdHandle);

        static void Main(string[] args)
        {
            uint STD_OUTPUT_HANDLE = 0xfffffff5;
            IntPtr hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

            SetConsoleTextAttribute(hConsole, (int)Colour.Red + (int)Colour.Green + (int)Colour.Intensity);
            Console.WriteLine("Red + Green + Intensity == Yellow");

            SetConsoleTextAttribute(hConsole, (int)Colour.Red + (int)Colour.Green + (int)Colour.Intensity + (int)Colour.Red);
            Console.WriteLine("Yellow + Red != Orange");

            SetConsoleTextAttribute(hConsole, 15);
            Console.WriteLine();
            Console.WriteLine("Press Enter to exit ...");
            Console.Read();
        }

        public enum Colour
        {
            Blue = 0x00000001,
            Green = 0x00000002,
            Red = 0x00000004,
            Intensity = 0x00000008
        }
    }
}

Mit dieser Methode können Sie nichts hinzufügen, das nicht über ConsoleColor erreicht werden kann. Es ist wirklich eine Schande, da ich auch gerne Orange zu meiner App hinzufügen würde. Wenn jemand einen Weg gefunden hat, wäre ich sehr interessiert.




Sie können Colorful.Console dem Sie benutzerdefinierte Farben verwenden können, und sogar Figlet-Schriftarten, mit denen Sie ASCII-Grafiken erstellen können!






Related