Полноэкранная консоль C#?

Я видел, что Windows может переключаться на самый базовый консольный интерфейс при обновлении видеодрайверов, и я также видел, как это делают такие программы, как Borland C++.
Я бы очень хотел знать, как сделать это с консольным приложением на C# (или VB.NET если хотите), и я не против использовать P / Invoke (и я уверен, что должен!).

5 ответов


в старых версиях Windows вы можете поместить любую консоль в полноэкранный режим с помощью Alt-Enter (Если я правильно помню).

С введением диспетчера окон рабочего стола и полноэкранной композиции через GPU в Vista эта полноэкранная функция окна консоли была удалена.

(при обновлении графического драйвера графическая подсистема сбрасывается, и вы видите не окно консоли, а запуск графической карты по умолчанию в текстовый режим.)


Windows 7 не поддерживает полноэкранные консольные приложения. На XP вы можете использовать SetConsoleDisplayMode, вам нужно будет P / Invoke для этого, но это относительно просто. Я знаю, что на win 7 x64 эта функция завершится с ошибкой 120 This function is not spported on this system

чтобы получить дескриптор консоли, вы можете использовать некоторые код ответ.


вы можете щелкнуть правой кнопкой мыши на консоли, выберите Свойства и в опции pan установите его в полноэкранном режиме. вы можете сохранить эти изменения для сохранения.


вы имеете в виду выгрузку GUI вообще или изменение разрешения экрана, например, когда вы устанавливаете новый драйвер устройства, а windows переходит на 800x600/8bpp вместо вашего обычного разрешения? Я не могу помочь, если вы хотите полноэкранную консоль, но если вы пытаетесь изменить разрешение экрана и т. д., взгляните на http://www.c-sharpcorner.com/UploadFile/GemingLeader/display-settings08262009094802AM/display-settings.aspx


возможно, мой реализация здесь может помочь. Обратите внимание, что это не будет работать в системах 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

        }
}