Windows Console

Pause

Windows Console — графическое приложение, предназначенное для запуска консольных приложений в операционных системах Windows. Оно используется для работы с текстовыми программами, такими как операционные оболочки (Command Prompt, PowerShell), различные утилиты (например, Far Manager) и некоторые, преимущественно устаревшие, прикладные программы (например, Midnight Commander).

Также пишется как Win32 console. В Windows 10 появилась Windows Terminal, позиционируемая как замена Windows Console[1]. В 2019 году исходный код консольного хоста был открыт под лицензией MIT License вместе с Windows Terminal[2].

Использование

Полноэкранный режим

Windows Console может работать как в оконном, так и в полноэкранном режиме. Переключение между режимами производится с помощью сочетания клавиш Alt+Enter.

В оконном режиме консоль отображает текст в отдельном окне, используя средства рендеринга шрифтов операционной системы. В этом случае взаимодействие пользователя с приложением осуществляется посредством оконной системы — аналогично приложениям X Window System, таким как xterm.

В Windows XP и более ранних версиях полноэкранный режим использовал аппаратный текстовый режим и загружал растровый шрифт в видеоадаптер, подобно текстовой системной консоли. Этот режим поддерживал только текстовые режимы, совместимые с VGA, с максимальным разрешением 80 столбцов на 28 строк[3]. В Windows Vista этот режим был удалён[4], хотя вплоть до Windows 8 его можно было вернуть, установив драйвер видеокарты от Windows XP[4][5].

В Windows 10 полноэкранный режим вновь доступен. Его реализация использует собственную подсистему рендеринга Windows вместо аппаратного текстового режима и позволяет динамически заполнять окно символами по количеству строк и столбцов[6].

Программный доступ

Программы могут взаимодействовать с консолью через Windows API, который предоставляет как высокоуровневые функции (ReadFile, ReadConsole, WriteFile, WriteConsole), так и низкоуровневые функции (ReadConsoleInput, WriteConsoleOutput)[7].

Шрифты и цвета

Пользователь может настраивать шрифт и цветовую палитру консоли — как системно, так и на уровне отдельного приложения. Однако экземпляр консольного приложения не может изменять эти параметры «на лету» в процессе работы.

Отличие от DOS-приложений

Консольные приложения отличаются от приложений MS-DOS, хотя во внешнем виде (особенно в Windows 9x) могут быть похожи. Консольное приложение имеет доступ к Windows API и не работает в среде MS-DOS или совместимых системах. DOS-приложение не может использовать Windows API и работает только на 32-битных версиях Windows с помощью Virtual DOS Machine (VDM).

Архитектура

Буферизация ввода/вывода

Каждый экземпляр Windows Console располагает буфером экрана и буфером ввода. Буфер ввода — это очередь, в которую поступают события ввода (от клавиатуры, мыши и др.). Буфер вывода — прямоугольная сетка, где хранятся символы и их атрибуты. Консольное окно может иметь несколько буферов вывода, но одновременно отображается только один из них (активный).

Реализации

В Windows 3.1 и более ранних версиях не было собственной поддержки консоли — эти системы представляли собой графический интерфейс поверх MS-DOS, и большинство текстовых программ реализованы как MS-DOS-приложения в окне. Для упрощения портирования приложений на Windows в ранних версиях Visual C++ использовалась библиотека QuickWin, реализующая базовые консольные возможности в обычном окне. Аналогичная библиотека для Borland C++ называлась EasyWin.

Windows 9x

undefined

В Windows 9x поддержка консоли была существенно ограничена по сравнению с Windows NT, поскольку консольное окно работало внутри виртуальной DOS-машины, а ввод с клавиатуры для приложений Win32 консоли обрабатывался процессом conagent.exe, выполнявшемся также в среде DOS через перехват прерывания клавиатуры. Затем conagent.exe передавал данные драйверу Vcond (VxD), который далее обеспечивал передачу ввода основной виртуальной машине и, в итоге, Win32-программе. Кроме невысокой производительности, проблема заключалась также в том, что локальные для данной ДОС-машины диски были невидимы для Win32-консольных программ.

В Windows 9x буфер экрана повторял структуру VGA-буфера: на каждый символ приходилось по два байта (один для кода символа — в OEM-странице, другой для атрибутов), что ускоряло работу при использовании VGA-режима.

Windows NT и Windows CE

Традиционно управление оконными консолями в семействах Windows NT выполнялось подсистемой Client/Server Runtime Subsystem (CSRSS)[8]. В Windows 7 CSRSS запускает отдельный процесс conhost.exe для каждого окна консоли. В Windows 8 и новее процессы conhost.exe запускаются непосредственно приложением консоли. Это изменение имело как соображения безопасности (процесс CSRSS работает в привилегированном режиме, а conhost.exe — в контексте пользователя консольного приложения), так и функциональности — начиная с Windows 7, консольные окна получили поддержку тем оформления Aero Glass[9].

В Windows NT и Windows CE экранный буфер реализован с использованием четырёх байт на ячейку: два байта на код символа и два — на атрибуты. Символы кодируются в 16-битном диапазоне Unicode (UCS-2)[10]. Для обратной совместимости консольный API доступен в вариантах Unicode и не-Unicode; последний поддерживает смену кодовой страницы (например, с TrueType-шрифтами), а также используется режим UTF-8 (кодовая страница 65001)[11].

С обновления Windows 10 за октябрь 2018 года Windows Console получила полноценную поддержку Unicode[12].

Примечания

  1. ↑ Cinnamon, Kayla Introducing Windows Terminal (англ.). Microsoft Corporation (6 мая 2019). Дата обращения: 20 ноября 2020. Архивировано 25 августа 2025 года.
  2. ↑ Cinnamon, Kayla Introducing Windows Terminal (англ.). Windows Command Line Tools For Developers. Microsoft (6 мая 2019). Дата обращения: 10 мая 2019. Архивировано 25 августа 2025 года.
  3. ↑ Julio Sanchez. VGA Fundamentals, Part II: DOS Graphics // The PC Graphics Handbook (for C++ Programmers) / Julio Sanchez, Maria P. Canton. — CRC Press, 2003. — P. 125. — ISBN 0849316782.
  4. ↑ 1 2 Some 16-bit DOS-based Programs and the Command Prompt will not run in full-screen mode in Windows Vista and in Windows 7. Support. Microsoft (23 сентября 2011). Архивировано 30 сентября 2011 года.
  5. ↑ Roadmap for Developing Drivers for the Windows 2000 Display Driver Model (XDDM). Windows Dev Center - Hardware. Microsoft (16 ноября 2013). — «XDDM and VGA drivers will not compile on Windows 8 and later versions». Дата обращения: 16 декабря 2013. Архивировано 4 марта 2016 года.
  6. ↑ Tkachenko, Sergey Open command prompt fullscreen in Windows 10 (амер. англ.). Winaero (24 ноября 2014). Дата обращения: 31 июля 2019. Архивировано 31 июля 2025 года.
  7. ↑ Console Modes. Windows Console documentation. Microsoft. Дата обращения: 13 октября 2020. Архивировано 17 октября 2020 года.
  8. ↑ Microsoft Security Advisory (930181): Exploit Code Published Affecting Windows Client Server Run-Time Subsystem. Архивировано 10 февраля 2008 года.
  9. ↑ Yosifovich, Pavel. Windows Internals, Part 1: System architecture, processes, threads, memory management, and more / Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich … [и др.]. — 7th. — Redmond, Washington : Microsoft Press, 2017-05-15. — P. 67. — ISBN 9780735684188.
  10. ↑ Console Reference. Microsoft (2009). Дата обращения: 1 января 2010. Архивировано 19 сентября 2008 года.
  11. ↑ Release Notes (амер. англ.). docs.microsoft.com (27 июня 2022). — «Console: Fix for no output text being displayed in codepage 65001 (utf8)». Архивировано 4 июля 2022 года.
  12. ↑ Turner, Rich Windows Command-Line: Unicode and UTF-8 Output Text Buffer (амер. англ.). Windows Command Line Tools For Developers. Microsoft (15 ноября 2018). Дата обращения: 14 июня 2019. Архивировано 24 сентября 2025 года.
Pause