Из Википедии, бесплатной энциклопедии
  (Перенаправлено с консоли Win32 )
Перейти к навигации Перейти к поиску

Консоль Windows - это инфраструктура для консольных приложений в Microsoft Windows . Экземпляр консоли Windows имеет экранный буфер и буфер ввода . Это позволяет консольным приложениям запускаться внутри окна или в аппаратном текстовом режиме (чтобы занимать весь экран). Пользователь может переключаться между ними, используя комбинацию клавиш Alt+ ↵ Enter. Текстовый режим недоступен в Windows Vista и более поздних версиях. Однако, начиная с Windows 10 , доступен собственный полноэкранный режим.

Экземпляры консоли Windows обычно используются для приложений, которым не нужно отображать изображения, но которые могут использовать цвет. Примеры включают cmd.exe , Windows PowerShell , Far Manager и Midnight Commander .

В 2019 году инфраструктура Windows Console была открыта под лицензией MIT вместе с Windows Terminal . [1]

Оконный и полноэкранный режимы [ править ]

Windows PowerShell в Windows Vista
Midnight Commander с использованием персонажей рисования прямоугольников

В Windows консольное приложение может работать в двух режимах.

Один режим помещает текст в окно и использует рендеринг шрифта операционной системы . В этом режиме взаимодействие приложения с пользователем контролируется оконной системой. Это аналогично приложениям системы X Window, таким как 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 имеют доступ ко всему Windows API и не работают в 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 , Subsystem для 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 и non-Unicode. Версии API, отличные от Unicode, могут использовать переключение кодовых страниц для расширения диапазона отображаемых символов (но только если шрифты TrueType используются для окна консоли, тем самым расширяя диапазон доступных кодов). Даже UTF-8 доступен как "кодовая страница 65001" [10] (отображается только из подмножества UCS-2 полного Unicode [цитата ]).

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

См. Также [ править ]

  • Сравнение эмуляторов терминала
  • Интерфейс командной строки
  • Терминал Windows
  • Оболочка (вычисления)
  • Системная консоль
  • Консоль Linux
  • Текстовые (вычислительные)
  • Список ранее проприетарного программного обеспечения

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Документация консоли Windows
  • Командная строка Windows: Исторический блог