Windows Console

From Wikipedia, the free encyclopedia
  (Redirected from Win32 console)
Jump to navigation Jump to search
Windows Console
A Windows Console with cmd.exe in Windows 8
A Windows Console with cmd.exe in Windows 8
Other namesWin32 console
Developer(s)Microsoft
Repositorygithub.com/microsoft/terminal/tree/master/src/host
Written inC++
Operating systemMicrosoft Windows
PlatformIA-32, x86-64, ARM64
TypeWindows API, Terminal emulator
LicenseMIT License
Websitedocs.microsoft.com/en-us/windows/console/

The Windows Console is the Windows API-based infrastructure for text-based user interfaces and console applications in Microsoft Windows. An instance of a Windows Console has a screen buffer and an input buffer, and is available both as a window or in text mode screen, with switching back and forth available via Alt-Enter keys. The latter was not supported in Windows Vista, 7, 8, and 8.1, due to the system not supporting full-screen mode, but was made supported again in Windows 10.

Windows Console instances are typically used for applications that do not need to display images but which might use color. Examples include command-line interface tools; command line interpreters such as Windows Command Prompt, Windows PowerShell; file managers such as Far Manager and Midnight Commander; and editors such as the MS-DOS Editor.

In 2019, the Windows Console infrastructure was open-sourced under the MIT License, alongside Windows Terminal.[1]

Window and full screen modes[edit]

Windows PowerShell using the Win32 console window on Windows Vista.
GNU Midnight Commander using box drawing characters in the Win32 console.

A Win32 console application may run in two modes.

One mode places the text in a window and uses an operating system's font rendering. In this mode, an application's interaction with user is controlled by the windowing system. This is analogous to X Window System applications such as xterm.

In a full screen mode Win32 console uses a hardware text mode and uploads a raster font to the video adapter. This is analogous to a text system console. Full screen uses Windows' built-in VGA driver, rather than any installed graphics drivers, unless another driver is VGA-compatible.[2] Therefore, it only supports VGA-compatible text modes, giving it a maximum character resolution of 80 columns by 28 rows.[3] This contrasts with comparable consoles in various other operating systems such as Linux, which are able to display higher resolutions through different drivers. This mode was deprecated in Windows Vista as Windows Display Driver Model (WDDM) ceased to support these VGA modes.[4] It was possible to circumvent this issue by installing a Windows XP display driver;[4] however, Windows 8 and later only accepts WDDM drivers.[5]

An application can be instantly switched between these two modes with Alt+Return key combination.

Details[edit]

The input buffer is a queue where events are stored (from keyboard, mouse etc.). The output buffer is a rectangular grid where characters are stored, together with their attributes. A console window may have several output buffers, only one of which is active (i.e. displayed) for a given moment.

The console window may be displayed as a normal window on the desktop, or may be switched to full screen to use the actual hardware text mode, if a video driver permits a chosen screen size. The display mode is locked in background intensity mode, thus blinking does not work. Also, the underscore attribute is not available.

Programs may access a Win32 console either via high-level functions (such as ReadConsole and WriteConsole) or via low-level functions (e.g. ReadConsoleInput and WriteConsoleOutput). These high-level functions are more limited than a Win32 GUI; for instance it is not possible for a program to change the color palette, nor is it possible to modify the font used by the console using these functions.[6]

Win32 console programs are often mistaken for MS-DOS applications, especially on Windows 9x. However, a Win32 Console application is just a special form of a native Win32 application. 32-bit Windows can run MS-DOS programs in Win32 console through the use of the NT Virtual DOS Machine (NTVDM).

In earlier versions of Windows, there is no native support for consoles. Because Windows 3.1 and earlier are merely a graphical interface for MS-DOS, most text programs that ran on earlier Windows versions were actually MS-DOS programs running in a window. To simplify the task of porting applications to Windows, early versions of Visual C++ are supplied with QuickWin, a library that implements basic console functionality inside a regular window. A similar library for Borland C++ was called EasyWin.

Implementations[edit]

Windows 9x[edit]

Windows 9x support is relatively poor compared to Windows NT, because the console window runs in the system virtual DOS machine and so keyboard input to a Win32 console application had to be directed to it by conagent.exe running in a DOS VM that are also used for real DOS applications by hooking the keyboard interrupt. conagent.exe then calls Vcond (which is a VxD). Vcond then had to pass the keyboard input to the System VM, and then finally to the Win32 console application. Besides performance, another problem with this implementation is that drives that are local to a DOS VM are not visible to a Win32 console application. This can cause confusion.

Under Windows 9x, the screen buffer mirrors the structure of VGA text buffer, with two bytes per character cell: one byte for character code, one byte for attributes (the character must be in OEM character set, the attribute is with high-intensity background/no blinking). This speeds up operation considerably if the actual VGA text mode is used.

Windows NT and Windows CE[edit]

The Windows Subsystem for Linux running Bash in a Win32 console window on Windows 10.

The Client/Server Runtime Subsystem is responsible for Win32 console windows on Windows NT family of operating systems,[7] although since Windows 7 it offloads most of its work to a separate executable, conhost.exe. Further changes came in Windows 8, with the Conhost.exe process now being spawned by the console-based process rather than from Csrss.exe as in Windows 7[8]

Under Windows NT and Windows CE, the screen buffer uses four bytes per character cell: two bytes for character code, two bytes for attributes. The character is then encoded in a 16-bit subset of Unicode (UCS-2).[9] For backward compatibility, the console APIs exist in two versions: Unicode and non-Unicode. The non-Unicode versions of APIs can use code page switching to extend the range of displayed characters (but only if TrueType fonts are used for the console window, thereby extending the range of codes available). Even UTF-8 is available as "code page 65001"[10] (displaying only from the UCS-2 subset of full Unicode[citation needed]).

As of the Windows 10 October 2018 update, the Windows Console has full Unicode support.[11]

See also[edit]

References[edit]

  1. ^ Cinnamon, Kayla (May 6, 2019). "Introducing Windows Terminal". Windows Command Line Tools For Developers. Microsoft. Retrieved May 10, 2019.
  2. ^ VGA-Compatible Video Miniport Drivers, 2012-10-16, retrieved 2012-11-14
  3. ^ Julio Sanchez; Maria P. Canton (2003), "VGA Fundamentals, Part II: DOS Graphics", The PC Graphics Handbook (for C++ Programmers) (Book), CRC Press, p. 125, ISBN 0849316782
  4. ^ a b "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. 2011-09-23.
  5. ^ "Roadmap for Developing Drivers for the Windows 2000 Display Driver Model (XDDM)". Windows Dev Center - Hardware. Microsoft. 16 November 2013. Retrieved 16 December 2013. XDDM and VGA drivers will not compile on Windows 8 and later versions
  6. ^ A hack is available: SetConsolePalette
  7. ^ Microsoft Security Advisory (930181): Exploit Code Published Affecting Windows Client Server Run-Time Subsystem
  8. ^ Yosifovich, Pavel; Ionescu, Alex; Russinovich, Mark E.; Solomon, David A. (2017-05-15). Windows Internals, Part 1: System architecture, processes, threads, memory management, and more (7th Edition). Redmond, Washington: Microsoft Press. p. 67. ISBN 9780735684188.
  9. ^ "Console Reference". Microsoft. 2009. Retrieved 2010-01-01.
  10. ^ "Release Notes". docs.microsoft.com. Console: Fix for no output text being displayed in codepage 65001 (utf8)
  11. ^ Turner, Rich (2018-11-15). "Windows Command-Line: Unicode and UTF-8 Output Text Buffer". Windows Command Line Tools For Developers. Microsoft. Retrieved 2019-06-14.

External links[edit]