C#全屏控制台?

时间:2010-12-12 18:03:00

标签: c# console pinvoke console-application fullscreen

我已经看到Windows在更新视频驱动程序时可以切换到非常基本的控制台界面,我也看到像Borland C ++这样的程序这样做。
我真的很想知道如何使用C#中的控制台应用程序(或者如果你愿意的话,还可以使用VB.NET),我不介意使用P / Invoke(我敢打赌,我必须!)。

5 个答案:

答案 0 :(得分:6)

在旧版本的Windows中,您可以使用Alt-Enter将任何控制台全屏显示(如果我没记错的话)。

随着桌面窗口管理器的引入和Vista中GPU的全屏组合,全屏控制台窗口功能被删除。

(更新图形驱动程序时,图形子系统正在重置,你看到的不是控制台窗口,而是显卡默认启动到文本模式。)

答案 1 :(得分:2)

Windows 7不支持全屏控制台应用程序。在XP上你可以使用SetConsoleDisplayMode,你需要P / Invoke到这个,但它相对简单。我知道在win 7 x64上,此函数将失败,错误为120 This function is not spported on this system

要获得控制台句柄,您可以使用this answer中的一些代码。

答案 2 :(得分:1)

您可以右键单击控制台,单击属性,然后在选项盘中将其设置为全屏。您可以保存此更改以保持不变。

答案 3 :(得分:1)

您的意思是完全卸载GUI,还是更改屏幕分辨率,例如当您安装新设备驱动程序并且Windows转为800x600 / 8bpp而不是正常分辨率时?如果您想要全屏控制台,我无法提供帮助,但如果您要更改屏幕分辨率等,请查看http://www.c-sharpcorner.com/UploadFile/GemingLeader/display-settings08262009094802AM/display-settings.aspx

答案 4 :(得分:1)

也许我的implementation here可能有帮助。请注意,这对于缺少文本模式驱动程序支持的Windows系统不起作用。

using System;
using System.IO;
using System.Collections.Generic; //for dictionary
using System.Runtime.InteropServices; //for P/Invoke DLLImport

class App
{

        /// <summary>
        /// Contains native methods imported as unmanaged code.
        /// </summary>
        internal static class DllImports
        {
            [StructLayout(LayoutKind.Sequential)]
            public struct COORD
            {

                public short X;
                public short Y;
                public COORD(short x, short y) { 
                    this.X = x;
                    this.Y = y;
                }

            }
            [DllImport("kernel32.dll")]
            public static extern IntPtr GetStdHandle(int handle);
            [DllImport("kernel32.dll", SetLastError = true)]
            public static extern bool SetConsoleDisplayMode(
                IntPtr ConsoleOutput
                ,uint Flags
                ,out COORD NewScreenBufferDimensions
                );
        }
        /// Main App's Entry point
        public static void Main (string[] args)
        {
            IntPtr hConsole = DllImports.GetStdHandle(-11);   // get console handle
            DllImports.COORD xy = new DllImports.COORD(100,100);
            DllImports.SetConsoleDisplayMode(hConsole, 1, out xy); // set the console to fullscreen
            //SetConsoleDisplayMode(hConsole, 2);   // set the console to windowed

        }
}