Creación de una consola
El sistema crea una nueva consola cuando inicia un proceso de consola, un proceso en modo de carácter cuyo punto de entrada es la función principal. Por ejemplo, el sistema crea una nueva consola cuando inicia el procesador de comandos cmd.exe
. Cuando el procesador de comandos inicia un nuevo proceso de consola, el usuario puede especificar si el sistema crea una nueva consola para el nuevo proceso o si hereda la consola del procesador de comandos.
Un proceso puede crear una consola mediante uno de los siguientes métodos:
- Una interfaz gráfica de usuario (GUI) o un proceso de consola puede usar la función CreateProcess con CREATE_NEW_CONSOLE para crear un proceso de consola con una nueva consola. (De manera predeterminada, un proceso de consola hereda la consola de su elemento primario y no hay ninguna garantía de que el proceso para el que se ha diseñado reciba la entrada).
- Un proceso de consola o de GUI que no está asociado actualmente a una consola puede usar la función AllocConsole para crear una nueva consola. (Los procesos de GUI no se adjuntan a una consola cuando se crean. Los procesos de consola no se adjuntan a una consola si se crean mediante el elemento CreateProcess con DETACHED_PROCESS).
Normalmente, un proceso usa AllocConsole para crear una consola cuando se produce un error que requiere interacción con el usuario. Por ejemplo, un proceso de GUI puede crear una consola cuando se produce un error que impide que use su interfaz gráfica normal, o un proceso de consola que no interactúa normalmente con el usuario puede crear una consola para mostrar un error.
Un proceso también puede crear una consola mediante la especificación de la marca CREATE_NEW_CONSOLE en una llamada a CreateProcess. Este método crea una nueva consola que es accesible para el proceso secundario, pero no para el primario. Las consolas independientes permiten que los procesos primarios y secundarios interactúen con el usuario sin conflictos. Si esta marca no se especifica cuando se crea un proceso de consola, ambos procesos se asocian a la misma consola y no hay ninguna garantía de que el proceso correcto reciba la entrada prevista. Las aplicaciones pueden evitar confusiones mediante la creación de procesos secundarios que no heredan los identificadores del búfer de entrada o mediante la habilitación de un solo proceso secundario cada vez para heredar un identificador del búfer de entrada, a la vez que se impide que el proceso primario lea la entrada de la consola hasta que el secundario haya finalizado.
La creación de una nueva consola da como resultado una nueva ventana de consola, así como búferes de E/S independientes para la salida a la pantalla y la entrada del usuario. El proceso asociado a la nueva consola usa la función GetStdHandle para obtener los identificadores de los búferes de entrada y de pantalla de la nueva consola. Estos identificadores permiten que el proceso tenga acceso a la consola.
Cuando un proceso utiliza CreateProcess, puede especificar una estructura STARTUPINFO, cuyos miembros controlan las características de la primera consola nueva (si existe) creada para el proceso secundario. La estructura STARTUPINFO especificada en la llamada a CreateProcess afecta a una consola creada si se especifica la marca CREATE_NEW_CONSOLE. También afecta a una consola creada si el proceso secundario usa posteriormente AllocConsole. Se pueden especificar las siguientes características de la consola:
- Tamaño de la ventana de la nueva consola, en celdas de caracteres.
- Ubicación de la ventana de la nueva consola, en coordenadas de píxeles de pantalla.
- Tamaño del búfer de pantalla de la nueva consola, en celdas de caracteres.
- Atributos de color de fondo y de texto del búfer de pantalla de la nueva consola.
- Nombre para mostrar de la barra de título de la ventana de la nueva consola.
El sistema utiliza los valores predeterminados si no se especifican los valores de STARTUPINFO. Un proceso secundario puede usar la función GetStartupInfo para determinar los valores de su estructura STARTUPINFO.
Un proceso no puede cambiar la ubicación de la ventana de consola en la pantalla, pero las siguientes funciones de la consola están disponibles para establecer o recuperar las demás propiedades especificadas en la estructura STARTUPINFO.
Función | Descripción |
---|---|
GetConsoleScreenBufferInfo | Recupera el tamaño de la ventana, el tamaño de búfer de pantalla y los atributos de color. |
SetConsoleWindowInfo | Cambia el tamaño de la ventana de consola. |
SetConsoleScreenBufferSize | Cambia el tamaño del búfer de tamaño de la consola. |
SetConsoleTextAttribute | Establece los atributos de color. |
SetConsoleTitle | Establece el título de la ventana de consola. |
GetConsoleTitle | Recupera el título de la ventana de consola. |
Un proceso puede usar la función FreeConsole para desasociarse de una consola heredada o de una consola creada por AllocConsole.
Un proceso puede usar la función AttachConsole para asociarse a otra sesión de consola existente después de usar FreeConsole para desasociarse de su propia sesión (o si, de lo contrario, no hay ninguna sesión asociada).