Search code examples
c#.netvb.netconsoleposition

Position a small console window to the bottom left of the screen?


As the title says, I want to position it to the bottom left corner of the screen. Here's the code I have so far:

    Console.WindowWidth = 50
    Console.WindowHeight = 3
    Console.BufferWidth = 50
    Console.BufferHeight = 3
    Console.BackgroundColor = ConsoleColor.Black
    Console.ForegroundColor = ConsoleColor.DarkMagenta
    Console.Title = "My Title"
    Console.WriteLine("")
    Console.Write(" Press any key to close this window ...")

    Console.ReadKey()

Solution

  • You can use Console.WindowTop and Console.WindowWidth of the System.Console class to set the location of the console window.

    Here is an example on MSDN

    The BufferHeight and BufferWidth property gets/sets the number of rows and columns to be displayed.

    WindowHeight and WindowWidth properties must always be less than BufferHeight and BufferWidth respectively.

    WindowLeft must be less than BufferWidth - WindowWidth and WindowTop must be less than BufferHeight - WindowHeight.

    WindowLeft and WindowTop are relative to the buffer.

    To move the actual console window, this article has a good example.

    I have used some of your code and code from the CodeProject sample. You can set window location and size both in a single function. No need to set Console.WindowHeight and Console.WindowWidth again. This is how my class looks:

    class Program
    {
        const int SWP_NOZORDER = 0x4;
        const int SWP_NOACTIVATE = 0x10;
    
        [DllImport("kernel32")]
        static extern IntPtr GetConsoleWindow();
    
    
        [DllImport("user32")]
        static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,
            int x, int y, int cx, int cy, int flags);
    
        static void Main(string[] args)
        {
            Console.WindowWidth = 50;
            Console.WindowHeight = 3;
            Console.BufferWidth = 50;
            Console.BufferHeight = 3;
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.DarkMagenta;
    
            var screen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
            var width = screen.Width;
            var height = screen.Height;
    
            SetWindowPosition(100, height - 300, 500, 100);
            Console.Title = "My Title";
            Console.WriteLine("");
            Console.Write(" Press any key to close this window ...");
    
            Console.ReadKey();
        }
    
    
        /// <summary>
        /// Sets the console window location and size in pixels
        /// </summary>
        public static void SetWindowPosition(int x, int y, int width, int height)
        {
            SetWindowPos(Handle, IntPtr.Zero, x, y, width, height, SWP_NOZORDER | SWP_NOACTIVATE);
        }
    
        public static IntPtr Handle
        {
            get
            {
                //Initialize();
                return GetConsoleWindow();
            }
        }
    
    }