Консоль Windows — это инфраструктура для консольных приложений в Microsoft Windows . Экземпляр консоли Windows имеет буфер экрана и буфер ввода . Он позволяет консольным приложениям работать внутри окна или в аппаратном текстовом режиме (чтобы занимать весь экран). Пользователь может переключаться между ними с помощью комбинации клавиш Alt+ ↵ Enter. Текстовый режим недоступен в Windows Vista и более поздних версиях. Однако, начиная с Windows 10 , доступен собственный полноэкранный режим.
Экземпляры Windows Console обычно используются для приложений, которым не нужно отображать изображения, но которые могут использовать цвет. Примеры включают cmd.exe , Windows PowerShell , Far Manager и Midnight Commander .
В 2019 году консольный хост был открыт под лицензией MIT , наряду с Windows Terminal . [1]
В Windows консольное приложение может работать в двух режимах.
Один режим помещает текст в окно и использует рендеринг шрифтов операционной системы . В этом режиме взаимодействие приложения с пользователем контролируется оконной системой. Это аналогично приложениям X Window System, таким как xterm .
Второй — полноэкранный режим. В Windows XP и более ранних версиях полноэкранная консоль использует аппаратный текстовый режим и загружает растровый шрифт на видеоадаптер . Это аналогично текстовой системной консоли . Этот ранний полноэкранный режим поддерживает только текстовые режимы, совместимые с VGA, что дает ему максимальное разрешение символов 80 столбцов на 28 строк. [2] Этот режим был объявлен устаревшим в Windows Vista . [3] Эту проблему можно было обойти, установив драйвер дисплея Windows XP; [3] однако Windows 8 и более поздние версии их не принимают. [4] Windows 10 снова имеет полноэкранный режим, но эта реализация использует собственную подсистему рендеринга Windows вместо текстового режима. Он может иметь столько столбцов и строк, сколько помещается на экране. [5]
Приложения можно настроить так, чтобы они переключались между двумя режимами с помощью комбинации клавиш «+» .Alt↵ Enter
Входной буфер — это очередь, в которой хранятся события (от клавиатуры , мыши и т. д.). Выходной буфер — это прямоугольная сетка, в которой хранятся символы вместе с их атрибутами. Окно консоли может иметь несколько выходных буферов, только один из которых активен (т. е. отображается) в данный момент. Приложения могут программно взаимодействовать с консолью Windows через API Windows , который предоставляет как высокоуровневые функции (например, ReadConsole
и WriteConsole
), так и низкоуровневые функции (например, ReadConsoleInput
и WriteConsoleOutput
). [6]
Пользователи могут изменять цветовую палитру или шрифт , как на уровне системы, так и на уровне приложения. Однако каждый экземпляр консольного приложения сам по себе не может изменять свою цветовую палитру или шрифт на лету.
Консольные приложения Windows отличаются от приложений MS-DOS , хотя в Windows (особенно в Windows 9x ) они могут выглядеть не иначе. Консольные приложения Windows имеют доступ ко всему API Windows и не работают в MS-DOS или совместимых операционных системах. Однако приложения DOS не могут получить доступ к API Windows и могут работать только в 32-разрядных версиях Windows с помощью виртуальной машины DOS (VDM).
В Windows 3.1 и более ранних версиях нет встроенной поддержки консолей. Поскольку эти версии являются всего лишь графическим интерфейсом для MS-DOS, большинство текстовых программ, которые запускались в более ранних версиях Windows, на самом деле были программами MS-DOS, работающими в окне. Для упрощения задачи переноса приложений в Windows ранние версии Visual C++ поставляются с QuickWin — библиотекой, которая реализует базовую функциональность консоли внутри обычного окна. Похожая библиотека для Borland C++ называлась EasyWin.
Поддержка Windows 9x относительно слабая по сравнению с Windows NT , поскольку консольное окно работает в системной виртуальной машине DOS , и поэтому ввод с клавиатуры в консольное приложение Win32 должен был быть направлен в него conagent.exe, работающим в виртуальной машине DOS, которые также используются для реальных приложений DOS, путем перехвата прерывания клавиатуры. conagent.exe
затем вызывает Vcond (который является VxD ). Затем Vcond должен был передать ввод с клавиатуры в системную виртуальную машину, а затем, наконец, в консольное приложение Win32. Помимо производительности, еще одна проблема с этой реализацией заключается в том, что диски, которые являются локальными для виртуальной машины DOS, не видны консольному приложению Win32. Это может вызвать путаницу.
В Windows 9x буфер экрана отражает структуру текстового буфера VGA , с двумя байтами на ячейку символа: один байт для кода символа, один байт для атрибутов (символ должен быть в наборе символов OEM , атрибут должен быть с фоном высокой интенсивности/без мерцания). Это значительно ускоряет работу, если используется фактический текстовый режим VGA.
Традиционно подсистема выполнения клиент/сервер (CSRSS) отвечала за управление консольными окнами в семействе операционных систем Windows NT . [7] В Windows 7 CSRSS порождает одно conhost.exe
для каждого консольного окна, чтобы управлять им. В Windows 8 и более поздних версиях консольные приложения порождают свои conhost.exe
процессы напрямую. Это изменение имеет как последствия для безопасности, так и для удобства использования. Хотя CSRSS работает в высокопривилегированном контексте безопасности, каждое из них conhost.exe
работает в том же контексте безопасности, что и консольное приложение. Кроме того, в Windows 7 это изменение позволило консольным окнам иметь функции темы Aero Glass . [8]
В Windows NT и Windows CE экранный буфер использует четыре байта на ячейку символа: два байта для кода символа, два байта для атрибутов. Затем символ кодируется в 16-битном подмножестве Unicode ( UCS-2 ). [9] Для обратной совместимости консольные API существуют в двух версиях: Unicode и не-Unicode. Не-Unicode версии API могут использовать переключение кодовой страницы для расширения диапазона отображаемых символов (но только если для окна консоли используются шрифты TrueType , тем самым расширяя диапазон доступных кодов). Даже UTF-8 доступен как «кодовая страница 65001» [10] (отображение только из подмножества UCS-2 полного Unicode [ требуется ссылка ] ).
Начиная с обновления Windows 10 за октябрь 2018 года, консоль Windows полностью поддерживает Unicode. [11]
Драйверы XDDM и VGA не будут компилироваться в Windows 8 и более поздних версиях
Консоль: исправление проблемы с отображением текста на выходных данных в кодовой странице 65001 (utf8)