Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
 static public extern bool SetConsoleScreenBufferInfoEx(Microsoft.Win32.SafeHandles.SafeFileHandle ConsoleOutput, ref ConsoleScreenBufferInfoEx ConsoleScreenBufferInfoEx);