【发布时间】:2016-11-20 10:45:32
【问题描述】:
如何以编程方式实现控制台窗口不可调整大小。
我不希望用户用鼠标更改控制台窗口大小。
【问题讨论】:
标签: c# windows-console
如何以编程方式实现控制台窗口不可调整大小。
我不希望用户用鼠标更改控制台窗口大小。
【问题讨论】:
标签: c# windows-console
请参阅 MSDN 上 this post 中的答案。它需要 p 调用:
private const int MF_BYCOMMAND = 0x00000000;
public const int SC_CLOSE = 0xF060;
public const int SC_MINIMIZE = 0xF020;
public const int SC_MAXIMIZE = 0xF030;
public const int SC_SIZE = 0xF000;//resize
[DllImport("user32.dll")]
public static extern int DeleteMenu(IntPtr hMenu, int nPosition, int wFlags);
[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("kernel32.dll", ExactSpelling = true)]
private static extern IntPtr GetConsoleWindow();
static void Main(string[] args)
{
IntPtr handle = GetConsoleWindow();
IntPtr sysMenu = GetSystemMenu(handle, false);
if (handle != IntPtr.Zero)
{
DeleteMenu(sysMenu, SC_CLOSE, MF_BYCOMMAND);
DeleteMenu(sysMenu, SC_MINIMIZE, MF_BYCOMMAND);
DeleteMenu(sysMenu, SC_MAXIMIZE, MF_BYCOMMAND);
DeleteMenu(sysMenu, SC_SIZE, MF_BYCOMMAND);//resize
}
Console.Read();
}
请注意,这不会阻止 Windows 窗口捕捉(例如,将窗口拖动到屏幕边缘,Win+Left 和 Win +右)
由于您尝试禁用调整大小,我猜您也不需要滚动条。为此,请参阅Remove space left after console scrollbars in C# 的答案(匹配Console.SetWindowSize 和SetBufferSize 后的剩余内容;还需要p-invoking 来“修复”)。
【讨论】:
我不确定您是否可以避免这种行为。 但您可以尝试使用 WindowHeight、WindowWidth、LargestWindowHeight 和 LargestWindowWidth。 看到这个: https://msdn.microsoft.com/pt-br/library/system.console(v=vs.110).aspx
【讨论】: