I'm working with a C# Console Application. How can I move the application window to the center of the screen?
Additional details
Framework version: .NET Core 3.1
Size of the window: 37x20 (Console.SetWindowSize(37, 20);
)
I'm working with a C# Console Application. How can I move the application window to the center of the screen?
Framework version: .NET Core 3.1
Size of the window: 37x20 (Console.SetWindowSize(37, 20);
)
I would find the console's classname in all open windows. That is "ConsoleWindowClass". Just to be sure to get a handle on the terminal. In my code Kader1 is the desktop rectangle, Kader2 is the terminal's window rectangle.
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace Center
{
class Program
{
public static user32.RECT Kader1, Kader2;
public static IntPtr hWnd;
public static bool bRet;
static void Main(string[] args)
{
Kader1 = new user32.RECT();
bRet = user32.GetWindowRect(user32.GetDesktopWindow(), out Kader1);
user32.EnumDelegate filter = delegate (IntPtr hTmp, int lParam)
{
StringBuilder strbTitle = new StringBuilder(255);
int nLength = user32.GetWindowText(hTmp, strbTitle, strbTitle.Capacity + 1);
string strTitle = strbTitle.ToString();
StringBuilder strbClass = new StringBuilder(255);
int cLength = user32.GetClassName(hTmp, strbClass, strbClass.Capacity + 1);
string strClass = strbClass.ToString();
if (string.IsNullOrEmpty(strClass) == false && string.IsNullOrEmpty(strTitle) == false && strClass.Contains("IME") == false)
{
if (strClass.Contains("ConsoleWindowClass")) hWnd = hTmp;
}
return true;
};
Kader2 = new user32.RECT();
bRet = user32.EnumDesktopWindows(IntPtr.Zero, filter, IntPtr.Zero);
bRet = user32.GetWindowRect(hWnd, out Kader2);
bRet = user32.SetWindowPos(hWnd, IntPtr.Zero, Kader1.Right / 2 - (Kader2.Right - Kader2.Left) / 2,
Kader1.Bottom / 2 - (Kader2.Bottom - Kader2.Top) / 2, Kader2.Right - Kader2.Left, Kader2.Bottom - Kader2.Top, 0x0004);
if (bRet) Console.WriteLine("Hello Centered Console!");
}
}
class user32
{
public delegate bool EnumDelegate(IntPtr hWnd, int lParam);
[DllImport("user32.dll", EntryPoint = "GetWindowRect",
ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);
[DllImport("user32.dll", EntryPoint = "GetDesktopWindow",
ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll", EntryPoint = "GetWindowText",
ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpWindowText, int nMaxCount);
[DllImport("user32.dll", EntryPoint = "GetClassName",
ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
public static extern int GetClassName(IntPtr hWnd, StringBuilder lpWindowText, int nMaxCount);
[DllImport("user32.dll", EntryPoint = "EnumDesktopWindows",
ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool EnumDesktopWindows(IntPtr hDesktop, EnumDelegate lpEnumCallbackFunction, IntPtr lParam);
[DllImport("user32.dll", EntryPoint = "SetWindowPos",
ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
public struct RECT
{
public int Left, Top, Right, Bottom;
public RECT(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
}
}
}
Made a small utility class that allows you to center your console window.
Usage example:
Full source code:
References:
Bunch of StackOverflow posts that helped me put together this solution. https://stackoverflow.com/a/42306412/5946094
https://stackoverflow.com/a/13547659/5946094
https://stackoverflow.com/a/43793468/5946094
https://stackoverflow.com/a/31273557/5946094