// private static extern bool SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe); private static extern bool SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX_ARRAY csbe);
public static int SetColor(ConsoleColor colorToSet, COLORREF targetColor) { // CONSOLE_SCREEN_BUFFER_INFO_EX csbe = new CONSOLE_SCREEN_BUFFER_INFO_EX(); CONSOLE_SCREEN_BUFFER_INFO_EX_ARRAY csbe = new CONSOLE_SCREEN_BUFFER_INFO_EX_ARRAY(); csbe.cbSize = (int)Marshal.SizeOf(csbe); // 96 = 0x60 IntPtr hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); // 7 if (hConsoleOutput == INVALID_HANDLE_VALUE) { return(Marshal.GetLastWin32Error()); } bool brc = GetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe); if (!brc) { return(Marshal.GetLastWin32Error()); } csbe.colors[(int)colorToSet] = targetColor; /* * switch (colorToSet) * { * case ConsoleColor.Black: * csbe.black = targetColor; * break; * case ConsoleColor.DarkBlue: * csbe.darkBlue = targetColor; * break; * case ConsoleColor.DarkGreen: * csbe.darkGreen = targetColor; * break; * case ConsoleColor.DarkCyan: * csbe.darkCyan = targetColor; * break; * case ConsoleColor.DarkRed: * csbe.darkRed = targetColor; * break; * case ConsoleColor.DarkMagenta: * csbe.darkMagenta = targetColor; * break; * case ConsoleColor.DarkYellow: * csbe.darkYellow = targetColor; * break; * case ConsoleColor.Gray: * csbe.gray = targetColor; * break; * case ConsoleColor.DarkGray: * csbe.darkGray = targetColor; * break; * case ConsoleColor.Blue: * csbe.blue = targetColor; * break; * case ConsoleColor.Green: * csbe.green = targetColor; * break; * case ConsoleColor.Cyan: * csbe.cyan = targetColor; * break; * case ConsoleColor.Red: * csbe.red = targetColor; * break; * case ConsoleColor.Magenta: * csbe.magenta = targetColor; * break; * case ConsoleColor.Yellow: * csbe.yellow = targetColor; * break; * case ConsoleColor.White: * csbe.white = targetColor; * break; * } */ ++csbe.srWindow.Bottom; ++csbe.srWindow.Right; brc = SetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe); if (!brc) { return(Marshal.GetLastWin32Error()); } return(0); }
// private static extern bool SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe); internal static extern Boolean SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX_ARRAY csbe);