stringtranslate.com

Консоль Windows

Консоль 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 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 через 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

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. Не-Unicode версии API могут использовать переключение кодовой страницы для расширения диапазона отображаемых символов (но только если для окна консоли используются шрифты TrueType , тем самым расширяя диапазон доступных кодов). Даже UTF-8 доступен как «кодовая страница 65001» [10] (отображение только из подмножества UCS-2 полного Unicode [ требуется ссылка ] ).

Начиная с обновления Windows 10 за октябрь 2018 года, консоль Windows полностью поддерживает Unicode. [11]

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

Ссылки

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

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