You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中移除全屏控制台窗口的滚动条?

嘿,刚接触C#一周就想着从零做文字冒险游戏,这劲头太赞了!从Java转过来肯定有不少熟悉的编程逻辑,但控制台全屏这种偏系统层面的操作,确实得借助Windows的API来实现,你找的kernel32.dll的思路完全没问题,我给你补全完整的可运行代码,再拆解每个部分的作用,方便你理解和调整:

完整的全屏控制台实现代码
using System;
using System.Runtime.InteropServices;

class FullScreenConsole
{
    // 导入kernel32.dll中的相关API
    [DllImport("kernel32.dll")]
    private static extern IntPtr GetStdHandle(int nStdHandle);

    [DllImport("kernel32.dll")]
    private static extern bool SetConsoleDisplayMode(IntPtr hConsoleOutput, uint dwFlags, out COORD lpNewScreenBufferSize);

    [DllImport("kernel32.dll")]
    private static extern bool SetConsoleCursorInfo(IntPtr hConsoleOutput, ref CONSOLE_CURSOR_INFO lpConsoleCursorInfo);

    [DllImport("kernel32.dll")]
    private static extern bool SetConsoleWindowInfo(IntPtr hConsoleOutput, bool bAbsolute, ref SMALL_RECT lpConsoleWindow);

    [DllImport("kernel32.dll")]
    private static extern bool SetConsoleScreenBufferSize(IntPtr hConsoleOutput, COORD dwSize);

    // 定义需要用到的结构体
    [StructLayout(LayoutKind.Sequential)]
    private struct COORD
    {
        public short X;
        public short Y;
        public COORD(short x, short y)
        {
            X = x;
            Y = y;
        }
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct SMALL_RECT
    {
        public short Left;
        public short Top;
        public short Right;
        public short Bottom;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct CONSOLE_CURSOR_INFO
    {
        public uint dwSize;
        public bool bVisible;
    }

    // 常量定义
    private const int STD_OUTPUT_HANDLE = -11;
    private const uint CONSOLE_FULLSCREEN_MODE = 1;

    public static void EnableFullScreen()
    {
        IntPtr consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);

        // 设置全屏模式
        COORD dummyCoord;
        SetConsoleDisplayMode(consoleHandle, CONSOLE_FULLSCREEN_MODE, out dummyCoord);

        // 获取屏幕分辨率,设置控制台缓冲区和窗口大小匹配屏幕
        int screenWidth = Console.LargestWindowWidth;
        int screenHeight = Console.LargestWindowHeight;

        COORD bufferSize = new COORD((short)screenWidth, (short)screenHeight);
        SetConsoleScreenBufferSize(consoleHandle, bufferSize);

        SMALL_RECT windowRect = new SMALL_RECT()
        {
            Left = 0,
            Top = 0,
            Right = (short)(screenWidth - 1),
            Bottom = (short)(screenHeight - 1)
        };
        SetConsoleWindowInfo(consoleHandle, true, ref windowRect);

        // 隐藏光标,避免干扰文字冒险游戏的沉浸感
        CONSOLE_CURSOR_INFO cursorInfo = new CONSOLE_CURSOR_INFO();
        cursorInfo.dwSize = 1;
        cursorInfo.bVisible = false;
        SetConsoleCursorInfo(consoleHandle, ref cursorInfo);
    }

    public static void DisableFullScreen()
    {
        IntPtr consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
        COORD dummyCoord;
        // 恢复窗口模式
        SetConsoleDisplayMode(consoleHandle, 0, out dummyCoord);

        // 恢复光标可见
        CONSOLE_CURSOR_INFO cursorInfo = new CONSOLE_CURSOR_INFO();
        cursorInfo.dwSize = 1;
        cursorInfo.bVisible = true;
        SetConsoleCursorInfo(consoleHandle, ref cursorInfo);
    }

    static void Main(string[] args)
    {
        EnableFullScreen();

        Console.WriteLine("欢迎来到你的文字冒险游戏!按任意键退出全屏...");
        Console.ReadKey();

        DisableFullScreen();
    }
}
关键部分解释
  • DllImport特性:这是C#调用Windows原生API的方式,和Java的JNI有点类似,但写法更简洁,这里我们导入了kernel32.dll里几个控制控制台的核心函数。
  • 全屏模式切换:SetConsoleDisplayMode传入CONSOLE_FULLSCREEN_MODE就能让控制台切换到全屏,退出时传入0恢复窗口模式。
  • 缓冲区和窗口大小匹配:如果只开全屏不调整缓冲区,可能会出现滚动条,所以我们用Console.LargestWindowWidth/Height获取屏幕最大可用尺寸,把缓冲区和窗口都设成这个大小,保证无滚动条的全屏体验。
  • 隐藏光标:文字冒险游戏讲究沉浸感,光标晃来晃去很出戏,所以用SetConsoleCursorInfo把光标可见性设为false,退出时再恢复。
使用提示
  1. 这段代码只能在Windows系统上运行,因为依赖Windows的kernel32.dll,如果你以后想跨平台,可能得换其他方案,但文字冒险游戏先在Windows上搞完全没问题。
  2. 你可以把EnableFullScreen()放在游戏启动的最开始,退出游戏前调用DisableFullScreen()恢复系统默认状态。
  3. 如果需要处理按键退出全屏(比如按Esc),可以在游戏主循环里监听Console.ReadKey()的按键值,判断后调用恢复方法。

内容的提问来源于stack exchange,提问作者8BiT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:53:18