public static Palette GetPalette()
        {
            SetStandardPalette();
            NativeMethods.CONSOLE_SCREEN_BUFFER_INFO_EX csbe = new NativeMethods.CONSOLE_SCREEN_BUFFER_INFO_EX();
            csbe.cbSize = (int)Marshal.SizeOf(csbe);
            IntPtr hConsoleOutput = NativeMethods.GetStdHandle(NativeMethods.STD_OUTPUT_HANDLE).DangerousGetHandle();

            NativeMethods.GetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);
            Color[] colors = new Color[16];
            colors[0]  = csbe.black.GetColor();
            colors[1]  = csbe.darkBlue.GetColor();
            colors[2]  = csbe.darkGreen.GetColor();
            colors[3]  = csbe.darkCyan.GetColor();
            colors[4]  = csbe.darkRed.GetColor();
            colors[5]  = csbe.darkMagenta.GetColor();
            colors[6]  = csbe.darkYellow.GetColor();
            colors[7]  = csbe.gray.GetColor();
            colors[8]  = csbe.darkGray.GetColor();
            colors[9]  = csbe.blue.GetColor();
            colors[10] = csbe.green.GetColor();
            colors[11] = csbe.cyan.GetColor();
            colors[12] = csbe.red.GetColor();
            colors[13] = csbe.magenta.GetColor();
            colors[14] = csbe.yellow.GetColor();
            colors[15] = csbe.white.GetColor();
            Palette palette = new Palette();

            palette.colors = colors;
            return(palette);
        }
 public static extern bool SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref NativeMethods.CONSOLE_SCREEN_BUFFER_INFO_EX csbe);
        public static int SetColor(int color, uint r, uint g, uint b)
        {
            SetStandardPalette();
            NativeMethods.CONSOLE_SCREEN_BUFFER_INFO_EX csbe = new NativeMethods.CONSOLE_SCREEN_BUFFER_INFO_EX();
            csbe.cbSize = (int)Marshal.SizeOf(csbe);
            IntPtr hConsoleOutput = NativeMethods.GetStdHandle(NativeMethods.STD_OUTPUT_HANDLE).DangerousGetHandle();

            if (hConsoleOutput == NativeMethods.INVALID_HANDLE_VALUE)
            {
                return(Marshal.GetLastWin32Error());
            }
            bool brc = NativeMethods.GetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);

            if (!brc)
            {
                return(Marshal.GetLastWin32Error());
            }
            switch (color)
            {
            case 0:
                csbe.black = new NativeMethods.COLORREF(r, g, b);
                break;

            case 1:
                csbe.darkBlue = new NativeMethods.COLORREF(r, g, b);
                break;

            case 2:
                csbe.darkGreen = new NativeMethods.COLORREF(r, g, b);
                break;

            case 3:
                csbe.darkCyan = new NativeMethods.COLORREF(r, g, b);
                break;

            case 4:
                csbe.darkRed = new NativeMethods.COLORREF(r, g, b);
                break;

            case 5:
                csbe.darkMagenta = new NativeMethods.COLORREF(r, g, b);
                break;

            case 6:
                csbe.darkYellow = new NativeMethods.COLORREF(r, g, b);
                break;

            case 7:
                csbe.gray = new NativeMethods.COLORREF(r, g, b);
                break;

            case 8:
                csbe.darkGray = new NativeMethods.COLORREF(r, g, b);
                break;

            case 9:
                csbe.blue = new NativeMethods.COLORREF(r, g, b);
                break;

            case 10:
                csbe.green = new NativeMethods.COLORREF(r, g, b);
                break;

            case 11:
                csbe.cyan = new NativeMethods.COLORREF(r, g, b);
                break;

            case 12:
                csbe.red = new NativeMethods.COLORREF(r, g, b);
                break;

            case 13:
                csbe.magenta = new NativeMethods.COLORREF(r, g, b);
                break;

            case 14:
                csbe.yellow = new NativeMethods.COLORREF(r, g, b);
                break;

            case 15:
                csbe.white = new NativeMethods.COLORREF(r, g, b);
                break;

            default:
                throw new Exception("Not a valid Color");
            }
            ++csbe.srWindow.Bottom;
            ++csbe.srWindow.Right;
            brc = NativeMethods.SetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);
            if (!brc)
            {
                return(Marshal.GetLastWin32Error());
            }
            return(0);
        }
        public static Color GetColor(int color)
        {
            SetStandardPalette();
            NativeMethods.CONSOLE_SCREEN_BUFFER_INFO_EX csbe = new NativeMethods.CONSOLE_SCREEN_BUFFER_INFO_EX();
            csbe.cbSize = (int)Marshal.SizeOf(csbe);
            IntPtr hConsoleOutput = NativeMethods.GetStdHandle(NativeMethods.STD_OUTPUT_HANDLE).DangerousGetHandle();

            NativeMethods.GetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);
            switch (color)
            {
            case 0:
                return(csbe.black.GetColor());

            case 1:
                return(csbe.darkBlue.GetColor());

            case 2:
                return(csbe.darkGreen.GetColor());

            case 3:
                return(csbe.darkCyan.GetColor());

            case 4:
                return(csbe.darkRed.GetColor());

            case 5:
                return(csbe.darkMagenta.GetColor());

            case 6:
                return(csbe.darkYellow.GetColor());

            case 7:
                return(csbe.gray.GetColor());

            case 8:
                return(csbe.darkGray.GetColor());

            case 9:
                return(csbe.blue.GetColor());

            case 10:
                return(csbe.green.GetColor());

            case 11:
                return(csbe.cyan.GetColor());

            case 12:
                return(csbe.red.GetColor());

            case 13:
                return(csbe.magenta.GetColor());

            case 14:
                return(csbe.yellow.GetColor());

            case 15:
                return(csbe.white.GetColor());

            default:
                throw new Exception("Not a valid Color");
            }
        }