Полноэкранная консоль 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
}
}