C # полноэкранная консоль? - PullRequest
       61

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

10 голосов
/ 12 декабря 2010

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

Ответы [ 5 ]

6 голосов
/ 12 декабря 2010

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

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

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

2 голосов
/ 12 декабря 2010

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

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

1 голос
/ 18 сентября 2012

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

        }
}
1 голос
/ 12 декабря 2010

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

1 голос
/ 12 декабря 2010

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

...