Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Console.SetWindowPosition -> centered (each and every time)

Tags:

c#

I'm trying to set the Console window executed via my C-sharp code to be centered each and every time code is generated.

I hope that makes sense.

like image 599
manny Avatar asked May 22 '10 16:05

manny


1 Answers

This requires P/Invoke. Project + Add Reference, select System.Drawing. Again for System.Windows.Forms. Add a new class to your project and paste this code:

using System;
using System.ComponentModel;
using System.Drawing;           // NOTE: Project + Add Reference required
using System.Windows.Forms;     // NOTE: Project + Add Reference required
using System.Runtime.InteropServices;

public static class ConsoleUtils {

    public static void CenterConsole() {
        IntPtr hWin = GetConsoleWindow();
        RECT rc;
        GetWindowRect(hWin, out rc);
        Screen scr = Screen.FromPoint(new Point(rc.left, rc.top));
        int x = scr.WorkingArea.Left + (scr.WorkingArea.Width - (rc.right - rc.left)) / 2;
        int y = scr.WorkingArea.Top + (scr.WorkingArea.Height - (rc.bottom - rc.top)) / 2;
        MoveWindow(hWin, x, y, rc.right - rc.left, rc.bottom - rc.top, false);
    }

    // P/Invoke declarations
    private struct RECT { public int left, top, right, bottom; }
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern IntPtr GetConsoleWindow();
    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool GetWindowRect(IntPtr hWnd, out RECT rc);
    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int w, int h, bool repaint);
}
like image 50
Hans Passant Avatar answered Oct 07 '22 12:10

Hans Passant