Teks Berwarna dalam Aplikasi Konsol
Enum ConsoleColor terbina dalam menyediakan pilihan warna teks yang terhad untuk aplikasi konsol C#. Walau bagaimanapun, mungkin ada kalanya anda menginginkan warna tertentu, seperti oren, itu tidak disertakan.
Penghadan ConsoleColor Enum
Enum ConsoleColor menyenaraikan teks yang disokong warna, iaitu:
Black DarkBlue DarkGreen DarkCyan DarkRed DarkMagenta DarkYellow Gray DarkGray Blue Green Cyan Red Magenta Yellow White
Seperti yang anda lihat, oren tidak terdapat dalam set ini warna.
Warna Teks Tersuai melalui P/Invoke
Untuk mencapai warna teks tersuai, kita boleh mendalami bidang Invocation Platform (P/Invoke). Dengan menggunakan fungsi SetConsoleScreenBufferInfoEx() daripada pustaka kernel32.dll, kami boleh memanipulasi terus tetapan warna konsol.
Mula-mula, tentukan struktur data yang diperlukan:
[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; ... }
Kemudian, import fungsi yang diperlukan daripada 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);
Menetapkan Warna Tersuai
Dengan alatan ini, kami kini boleh menentukan kaedah untuk menetapkan warna konsol tertentu, termasuk oren:
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; }
Sekarang, mari kita lihat contoh SetScreenColors dalam tindakan:
static void Main(string[] args) { Color screenTextColor = Color.Orange; Color screenBackgroundColor = Color.Black; SetScreenColors(screenTextColor, screenBackgroundColor); Console.WriteLine("Hello World!"); Console.ReadKey(); }
Dengan menggunakan kaedah di atas, anda boleh menetapkan latar depan dan warna latar belakang konsol anda kepada sebarang nilai RGB yang dikehendaki, termasuk oren. Nikmati menyesuaikan output konsol anda!
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memaparkan Warna Tersuai (Seperti Jingga) dalam Aplikasi Konsol C# Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!