【问题标题】:C# Console Disable ResizeC# 控制台禁用调整大小
【发布时间】:2016-11-20 10:45:32
【问题描述】:

如何以编程方式实现控制台窗口不可调整大小。

我不希望用户用鼠标更改控制台窗口大小。

【问题讨论】:

    标签: c# windows-console


    【解决方案1】:

    请参阅 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 来“修复”)。

    【讨论】:

      【解决方案2】:

      我不确定您是否可以避免这种行为。 但您可以尝试使用 WindowHeight、WindowWidth、LargestWindowHeight 和 LargestWindowWidth。 看到这个: https://msdn.microsoft.com/pt-br/library/system.console(v=vs.110).aspx

      【讨论】:

      • 不是前两个初始设置(高度/宽度)...您也可以尝试 Console.SetWindowSize(width, height) 但我想它无法避免用户重新调整窗口 - 除非您一直手动检查并根据需要进行设置。
      • 你在我的评论之后添加了这两个。事实上,这些都不能阻止调整大小。
      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多