# Consola de Windows

La Consola de Windows es la infraestructura para las aplicaciones de consola en Microsoft Windows. Una instancia de la Consola de Windows tiene un búfer de pantalla y un búfer de entrada. Permite que las aplicaciones de consola se ejecuten dentro de una ventana o en modo de texto por hardware (para que ocupen toda la pantalla). El usuario puede cambiar entre los dos usando la combinación de teclas Alt y Intro. El modo de texto no está disponible en Windows Vista y posteriores. Sin embargo, a partir de Windows 10, está disponible un modo nativo de pantalla completa.
Las instancias de la Consola de Windows se utilizan normalmente para aplicaciones que no necesitan mostrar imágenes pero que pueden utilizar el color. Algunos ejemplos son el símbolo del sistema de Windows, Windows PowerShell, Far Manager y Midnight Commander.
En 2019, la infraestructura de la Consola de Windows fue de código abierto bajo la licencia MIT, junto con Terminal Windows.

## Modos de ventana y pantalla completa

En Windows, una aplicación de consola puede ejecutarse en dos modos.
Un modo coloca el texto en una ventana y utiliza la representación de la fuente del sistema operativo. En este modo, la interacción de una aplicación con el usuario está controlada por el sistema de ventanas. Es análogo a las aplicaciones del sistema X Window, como xterm.
El segundo es el modo de pantalla completa. En Windows XP y anteriores, la consola de pantalla completa utiliza un modo de texto por hardware y carga una fuente rasterizada en el adaptador de vídeo. Esto es análogo a una consola de sistema de texto. Este primer modo de pantalla completa sólo admite modos de texto compatibles con VGA, lo que le da una resolución máxima de caracteres de 80 columnas por 28 filas. Este modo quedó obsoleto en Windows Vista. Era posible sortear este problema instalando un controlador de pantalla de Windows XP; sin embargo, Windows 8 y posteriores no los aceptan. Windows 10 vuelve a tener un modo de pantalla completa, pero esta implementación utiliza el subsistema de renderizado nativo de Windows, en lugar del modo de texto. Puede tener tantas columnas y filas como quepan en la pantalla.

## Detalles

El búfer de entrada es una cola donde se almacenan los eventos (del teclado, del ratón, etc.). El búfer de salida es una cuadrícula rectangular donde se almacenan los caracteres, junto con sus atributos. Una ventana de consola puede tener varios búferes de salida, de los cuales sólo uno está activo (es decir, se muestra) en un momento dado. Las aplicaciones pueden interactuar programáticamente con la consola de Windows a través de la API de Windows, que expone tanto funciones de alto nivel (como ReadConsole y WriteConsole) como funciones de bajo nivel (por ejemplo, ReadConsoleInput y WriteConsoleOutput).
Los usuarios pueden cambiar la paleta de colores o el tipo de letra, ya sea a nivel de todo el sistema o de la aplicación. Sin embargo, cada instancia de una aplicación de consola no puede cambiar su paleta de colores o su fuente sobre la marcha.
Las aplicaciones de la consola de Windows son distintas de las aplicaciones de MS-DOS, aunque en Windows (especialmente en Windows 9x) no parezcan diferentes. Las aplicaciones de la consola de Windows tienen acceso a toda la API de Windows y no se ejecutan en MS-DOS ni en sistemas operativos compatibles. Las aplicaciones de DOS, sin embargo, no pueden acceder a la API de Windows y sólo pueden ejecutarse en versiones de 32 bits de Windows con la ayuda de la máquina virtual de DOS (VDM).

## Implementaciones

Antes de Windows 95, no había soporte nativo para consolas. Dado que Windows 3.1 y los anteriores no son más que una interfaz gráfica para MS-DOS, la mayoría de los programas de texto que se ejecutaban en las primeras versiones de Windows eran en realidad programas de MS-DOS que se ejecutaban en una ventana. Para simplificar la tarea de portar aplicaciones a Windows, las primeras versiones de Visual C++ se suministran con QuickWin, una biblioteca que implementa la funcionalidad básica de la consola dentro de una ventana normal. Una biblioteca similar para Borland C++ se llamaba EasyWin.

### Windows 9x

El soporte de Windows 9x es relativamente pobre comparado con el de Windows NT, porque la ventana de la consola se ejecuta en la máquina virtual DOS del sistema y por lo tanto la entrada del teclado a una aplicación de consola Win32 tenía que ser dirigida a ella por conagent.exe que se ejecuta en una VM DOS que también se utiliza para las aplicaciones DOS reales enganchando la interrupción del teclado. conagent.exe entonces llama a Vcond (que es un VxD). Vcond entonces tuvo que pasar la entrada del teclado a la VM del Sistema, y luego finalmente a la aplicación de consola Win32. Además del rendimiento, otro problema con esta implementación es que las unidades que son locales a una VM DOS no son visibles para una aplicación de consola Win32. Esto puede causar confusión.
Bajo Windows 9x, el búfer de pantalla refleja la estructura del búfer de texto VGA, con dos bytes por celda de carácter: un byte para el código de carácter, un byte para los atributos (el carácter debe estar en el conjunto de caracteres OEM, el atributo es con fondo de alta intensidad/sin parpadeo). Esto acelera considerablemente el funcionamiento si se utiliza el modo de texto VGA real.

### Windows NT y Windows CE

Tradicionalmente, el subsistema de tiempo de ejecución cliente/servidor (CSRSS) se ha encargado de gestionar las ventanas de consola en la familia de sistemas operativos Windows NT. En Windows 7, el CSRSS genera un conhost.exe por cada ventana de consola, para gestionarla. En Windows 8 y posteriores, las aplicaciones de consola generan sus procesos conhost.exe directamente. Este cambio tiene implicaciones tanto de seguridad como de usabilidad. Mientras que CSRSS se ejecuta en un contexto de seguridad altamente privilegiado, cada conhost.exe se ejecuta en el mismo contexto de seguridad que la aplicación de consola. Además, en Windows 7, este cambio permitió que las ventanas de la consola tuvieran las características del tema Aero Glass.
En Windows NT y Windows CE, el búfer de pantalla utiliza cuatro bytes por celda de carácter: dos bytes para el código de carácter, dos bytes para los atributos. El carácter se codifica en un subconjunto de 16 bits de Unicode (UCS-2). Por compatibilidad con el pasado, las API de la consola existen en dos versiones: Unicode y no Unicode. Las versiones no Unicode de las APIs pueden utilizar el cambio de página de códigos para ampliar el rango de caracteres mostrados (pero sólo si se utilizan fuentes TrueType para la ventana de la consola, ampliando así el rango de códigos disponibles). Incluso UTF-8 está disponible como "página de código 65001" (mostrando sólo desde el subconjunto UCS-2 de Unicode completo [cita requerida]).
A partir de la actualización de Windows 10 de octubre de 2018, la Consola de Windows tiene soporte completo para Unicode.