Консоль Windows — это инфраструктура для консольных приложений в Microsoft Windows . Экземпляр консоли Windows имеет экранный буфер и входной буфер . Он позволяет консольным приложениям запускаться внутри окна или в аппаратном текстовом режиме (чтобы занять весь экран). Пользователь может переключаться между ними с помощью комбинации клавиш Alt+ ↵ Enter. Текстовый режим недоступен в Windows Vista и более поздних версиях. Однако, начиная с Windows 10 , доступен собственный полноэкранный режим.
Экземпляры консоли Windows обычно используются для приложений, которым не требуется отображать изображения, но которые могут использовать цвет. Примеры включают 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 через Windows API , который предоставляет как функции высокого уровня (например, ReadConsole
и WriteConsole
), так и функции низкого уровня (например, ReadConsoleInput
и WriteConsoleOutput
). [6]
Пользователи могут изменить цветовую палитру или шрифт либо на общесистемном уровне, либо на уровне приложения. Однако каждый экземпляр консольного приложения не может менять свою цветовую палитру или шрифт на лету.
Приложения консоли Windows отличаются от приложений MS-DOS , хотя в Windows (особенно в Windows 9x ) они могут не отличаться. Приложения консоли Windows имеют доступ ко всему API Windows и не запускаются в MS-DOS или совместимых операционных системах. Однако приложения DOS не могут получить доступ к Windows API и могут работать только в 32-разрядных версиях Windows с помощью виртуальной машины DOS (VDM).
До Windows 95 встроенная поддержка консолей отсутствовала. Поскольку 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. Версии API, не поддерживающие Юникод, могут использовать переключение кодовых страниц для расширения диапазона отображаемых символов (но только если для окна консоли используются шрифты TrueType , тем самым расширяя диапазон доступных кодов). Даже UTF-8 доступен как «кодовая страница 65001» [10] (отображается только из подмножества UCS-2 полного Unicode ) .
Начиная с обновления Windows 10 за октябрь 2018 г., консоль Windows имеет полную поддержку Unicode. [11]
Драйверы XDDM и VGA не компилируются в Windows 8 и более поздних версиях.
Консоль: исправлено отсутствие отображения выходного текста в кодовой странице 65001 (utf8).