public void SetColorTable(List <System.Drawing.Color> Colors) { ConsoleScreenBufferInfoEx Temp = ScreenBufferInfo; for (int x = 0; x < Temp.ColorTable.Length && x < Colors.Count; x++) { Temp.ColorTable[x] = (uint)Colors[x].ToArgb(); } ScreenBufferInfo = Temp; }
public ScreenBuffer(ScreenBuffer CloneFrom, bool CopyContents = false) : this() { Mode = CloneFrom.Mode; ConsoleScreenBufferInfoEx TempBufferInfo = CloneFrom.ScreenBufferInfo; ScreenBufferInfo = TempBufferInfo; CursorSize = CloneFrom.CursorSize; CursorVisible = CloneFrom.CursorVisible; CursorLeft = CloneFrom.CursorLeft; CursorTop = CloneFrom.CursorTop; if (CopyContents) { // ReadConsoleOutput has a soft limited of 64K of data, but can go lower depending on heap usage. // Because of that we will limit ourselves to 32k per a copy, which works out to 8192 CharInfos. // So we will calculate the best size of buffer to fit into that. short BufferBlockWidth = TempBufferInfo.BufferSize.X; short BufferBlockHeight = (short)(0x2000 / TempBufferInfo.BufferSize.X); CharInfo[,] Buffer = new CharInfo[BufferBlockHeight, BufferBlockWidth]; Coord BufferSize = new Coord(BufferBlockWidth, BufferBlockHeight); Coord BufferPos = new Coord(0, 0); SmallRect Region = new SmallRect(0, 0, BufferSize.X - 1, BufferBlockHeight - 1); while (Region.Top <= TempBufferInfo.BufferSize.Y) { if (!WinAPI.ReadConsoleOutput(CloneFrom.BufferHandle, Buffer, BufferSize, BufferPos, ref Region)) { throw new ConsoleExException("ConsoleEx: Unable to read source screen buffer."); } if (!WinAPI.WriteConsoleOutput(BufferHandle, Buffer, BufferSize, BufferPos, ref Region)) { throw new ConsoleExException("ConsoleEx: Unable to write to screen buffer."); } Region.Top += BufferBlockHeight; Region.Bottom += BufferBlockHeight; } } OriginalAttributes = Attribute; }
public void SetWindowAndBufferSize(int Width, int Height) { ConsoleScreenBufferInfoEx Buffer = CurrentBuffer.ScreenBufferInfo; Buffer.Window.Width = (short)Width; Buffer.BufferSize.X = (short)Width; Buffer.MaximumWindowSize.X = (short)Width; Buffer.Window.Height = Height; if (Buffer.BufferSize.Y < Buffer.Window.Bottom) { Buffer.BufferSize.Y = Buffer.Window.Bottom; } Buffer.MaximumWindowSize.Y = (short)Height; CurrentBuffer.ScreenBufferInfo = Buffer; }
static public extern bool SetConsoleScreenBufferInfoEx(Microsoft.Win32.SafeHandles.SafeFileHandle ConsoleOutput, ref ConsoleScreenBufferInfoEx ConsoleScreenBufferInfoEx);