stringtranslate.com

Консоль Windows

Консоль 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 PowerShell в Windows Vista
Midnight Commander с использованием персонажей, рисующих коробки

В 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

Command.com работает в консоли Windows в Windows 95

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

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

Windows NT и Windows CE

Подсистема Windows для Linux под управлением Bash в Windows 10
Cmd.exe работает в Windows CE 3.0.

Традиционно подсистема выполнения клиента/сервера (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]

Смотрите также

Рекомендации

  1. Корица, Кайла (6 мая 2019 г.). «Знакомство с терминалом Windows». Инструменты командной строки Windows для разработчиков . Майкрософт . Проверено 10 мая 2019 г.
  2. ^ Хулио Санчес; Мария П. Кантон (2003), «Основы VGA, Часть II: Графика DOS», Справочник по графике для ПК (для программистов C ++) (книга), CRC Press, стр. 125, ISBN 0849316782
  3. ^ ab «Некоторые 16-битные программы для DOS и командная строка не запускаются в полноэкранном режиме в Windows Vista и Windows 7». Поддерживать . Майкрософт. 23 сентября 2011 г.
  4. ^ «План разработки драйверов для модели драйвера дисплея Windows 2000 (XDDM)» . Центр разработки для Windows — Аппаратное обеспечение . Майкрософт . 16 ноября 2013 года . Проверено 16 декабря 2013 г. Драйверы XDDM и VGA не компилируются в Windows 8 и более поздних версиях.
  5. Ткаченко, Сергей (24 ноября 2014 г.). «Открыть полноэкранный режим командной строки в Windows 10». Винаэро . Проверено 31 июля 2019 г.
  6. ^ «Режимы консоли». Документация консоли Windows . Майкрософт . Получено 13 октября 2020 г. - через Microsoft Docs.
  7. ^ Рекомендации Microsoft по безопасности (930181): опубликован код эксплойта, влияющий на подсистему времени выполнения клиентского сервера Windows.
  8. ^ Иосифович, Павел; Ионеску, Алекс; Руссинович, Марк Э.; Соломон, Дэвид А. (15 мая 2017 г.). Внутреннее устройство Windows, часть 1: Архитектура системы, процессы, потоки, управление памятью и многое другое (7-е изд.). Редмонд, Вашингтон: Microsoft Press. п. 67. ИСБН 9780735684188.
  9. ^ «Справочник по консоли». Майкрософт. 2009 . Проверено 1 января 2010 г.
  10. ^ «Примечания к выпуску». docs.microsoft.com . Консоль: исправлено отсутствие отображения выходного текста в кодовой странице 65001 (utf8).
  11. Тернер, Рич (15 ноября 2018 г.). «Командная строка Windows: выходной текстовый буфер Unicode и UTF-8». Инструменты командной строки Windows для разработчиков . Майкрософт . Проверено 14 июня 2019 г.

Внешние ссылки