Консоль Windows с cmd.exe в Windows 8 | |
Другие имена | Консоль Win32 |
---|---|
Разработчик (и) | Microsoft |
Репозиторий | github.com / microsoft / terminal / tree / master / src / host |
Написано на | C ++ |
Операционная система | Microsoft Windows |
Платформа | IA-32, x86-64, ARM64 |
Тип | Эмулятор терминала |
Лицензия | Лицензия MIT |
Веб-сайт | docs.microsoft.com / en-us / windows / console / |
Консоль Windows - это инфраструктура для консольных приложений в Microsoft Windows. Экземпляр консоли Windows имеет экранный буфер и входной буфер . Он позволяет консольным приложениям запускаться внутри окна или в аппаратном текстовом режиме (чтобы занимать весь экран). Пользователь может переключаться между ними, используя комбинацию клавиш Alt+ ↵ Enter. Текстовый режим недоступен в Windows Vista и более поздних версиях. Однако, начиная с Windows 10, доступен собственный полноэкранный режим.
Экземпляры консоли Windows обычно используются для приложений, которым не нужно отображать изображения, но которые могут использовать цвет. Примеры включают Windows PowerShell, Far Manager и Midnight Commander.
. В 2019 году инфраструктура консоли Windows была с открытым кодом в рамках Лицензия MIT, вместе с Windows Terminal.
В Windows консольное приложение может работать в двух режимах.
Один режим помещает текст в окно и использует рендеринг шрифта операционной системы. В этом режиме взаимодействие приложения с пользователем контролируется оконной системой. Это аналогично приложениям X Window System, например, xterm.
Второй - полноэкранный режим. В Windows XP и ранее полноэкранная консоль использует аппаратный текстовый режим и загружает растровый шрифт в видеоадаптер. Это аналог текстовой системной консоли. Этот ранний полноэкранный режим поддерживает только VGA-совместимые текстовые режимы, обеспечивая максимальное разрешение символов из 80 столбцов на 28 строк. Этот режим объявлен устаревшим в Windows Vista. Эту проблему можно было обойти, установив драйвер дисплея Windows XP; однако Windows 8 и более поздние версии не принимают их. Windows 10 снова имеет полноэкранный режим, но в этой реализации используется собственная подсистема рендеринга Windows вместо текстового режима. Он может иметь столько столбцов и строк, сколько помещается на экране.
Приложения могут переключаться между двумя режимами с помощью комбинации клавиш Alt+ ↵ Enter.
Буфер ввода - это очередь, в которой хранятся события (от клавиатуры, мыши и т. Д.). Буфер вывода представляет собой прямоугольную сетку, в которой хранятся символы вместе с их атрибутами. Окно консоли может иметь несколько буферов вывода, только один из которых активен (т. Е. Отображается) в данный момент. Приложения могут программно взаимодействовать с консолью Windows через Windows API, который предоставляет как функции высокого уровня (например, ReadConsole
и WriteConsole
), так и функции низкого уровня (например, ReadConsoleInput
и WriteConsoleOutput
).
Пользователи могут изменять цветовую палитру или шрифт на уровне всей системы или приложения. Каждый экземпляр самих консольных приложений, однако, не могут менять свою цветовую палитру или шрифт на лету.
Консольные приложения 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 ++.
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.. В Windows 7 CSRSS порождает по одному conhost.exe
для каждого окна консоли, чтобы управлять им. В Windows 8 и более поздних версиях консольные приложения напрямую порождают свои процессы conhost.exe
. Это изменение влияет как на безопасность, так и на удобство использования. Хотя CSRSS работает в контексте безопасности с высокими привилегиями, каждый conhost.exe
работает в том же контексте безопасности, что и консольное приложение. Кроме того, в Windows 7 это изменение позволило консольным окнам использовать функции темы Aero Glass.
В Windows NT и Windows CE экранный буфер использует четыре байта на символьную ячейку: два байта для кода символа, два байта для атрибутов. Затем символ кодируется в 16-битном подмножестве Unicode (UCS-2 ). Для обратной совместимости консольные API существуют в двух версиях: Unicode и non-Unicode. Версии API, не поддерживающие Unicode, могут использовать переключение кодовой страницы для расширения диапазона отображаемых символов (но только если для окна консоли используются шрифты TrueType, тем самым расширяя диапазон кодов имеется в наличии). Даже UTF-8 доступен как «кодовая страница 65001» (отображается только из подмножества UCS-2 полного Unicode).
Начиная с обновления Windows 10 за октябрь 2018 г., консоль Windows имеет полную поддержку Unicode.