Creazione di una console

Il sistema crea una nuova console quando avvia un processo della console, un processo in modalità carattere il cui punto di ingresso è la funzione principale. Ad esempio, il sistema crea una nuova console quando avvia il processore dei comandi cmd.exe. Quando il processore dei comandi avvia un nuovo processo della console, l'utente può specificare se il sistema crea una nuova console per il nuovo processo o se eredita la console del processore dei comandi.

Un processo può creare una console usando uno dei metodi seguenti:

  • Un processo dell'interfaccia utente grafica o della console può usare la funzione CreateProcess con CREATE_NEW_CONSOLE per creare un processo della console con una nuova console. Per impostazione predefinita, un processo della console eredita la console padre e non vi è alcuna garanzia che l'input venga ricevuto dal processo per cui è stato progettato.
  • Un processo dell'interfaccia utente grafica o della console che non è attualmente collegato a una console può usare la funzione AllocConsole per creare una nuova console. I processi GUI non vengono collegati a una console quando vengono creati. I processi della console non vengono collegati a una console se vengono creati usando CreateProcess con DETACHED_PROCESS.

In genere, un processo usa AllocConsole per creare una console quando si verifica un errore che richiede l'interazione con l'utente. Un processo dell'interfaccia utente grafica, ad esempio, può creare una console quando si verifica un errore che impedisce di usare l'interfaccia grafica normale oppure un processo della console, che in genere non interagisce con l'utente, può creare una console per visualizzare un errore.

Un processo può anche creare una console specificando il flag CREATE_NEW_CONSOLE in una chiamata a CreateProcess. Questo metodo crea una nuova console accessibile al processo figlio, ma non al processo padre. Console separate consentono ai processi padre e figlio di interagire con l'utente senza conflitti. Se questo contrassegno non viene specificato al momento della creazione di un processo della console, entrambi i processi vengono collegati alla stessa console e non è garantito che il processo corretto riceva l'input previsto. Le applicazioni possono impedire che si generi confusione creando processi figlio che non ereditano gli handle del buffer di input o abilitando solo un processo figlio alla volta per ereditare un handle del buffer di input, impedendo al processo padre di leggere l'input della console fino al completamento dell'elemento figlio.

La creazione di una nuova console comporta una nuova finestra della console, nonché buffer di I/O separati per l'output sullo schermo e l'input dell'utente. Il processo associato alla nuova console usa la funzione GetStdHandle per ottenere gli handle dei buffer di input e dello schermo della nuova console. Questi handle consentono al processo di accedere alla console.

Quando un processo usa CreateProcess, può specificare una struttura STARTUPINFO, i cui membri controllano le caratteristiche della prima nuova console (se presente) creata per il processo figlio. La struttura STARTUPINFO specificata nella chiamata a CreateProcess influisce su una console creata se viene specificato il flag CREATE_NEW_CONSOLE . Influisce, inoltre, su una console creata se il processo figlio usa successivamente AllocConsole. È possibile specificare le caratteristiche della console seguenti:

  • Dimensioni della nuova finestra della console, in celle di tipo carattere
  • Posizione della nuova finestra della console, in coordinate pixel dello schermo
  • Dimensioni del buffer dello schermo della console, in celle di tipo carattere
  • Attributi del colore di sfondo e di testo del buffer dello schermo della nuova console
  • Nome visualizzato per la barra del titolo della finestra della nuova console

Il sistema usa valori predefiniti se non vengono specificati i valori di STARTUPINFO. Un processo figlio può usare la funzione GetStartupInfo per determinare i valori nella relativa struttura STARTUPINFO.

Un processo non può modificare la posizione della finestra della console sullo schermo, ma sono disponibili le funzioni della console seguenti per impostare o recuperare le altre proprietà specificate nella struttura STARTUPINFO.

Funzione Descrizione
GetConsoleScreenBufferInfo Recupera le dimensioni della finestra, le dimensioni del buffer dello schermo e gli attributi del colore.
SetConsoleWindowInfo Modifica le dimensioni della finestra della console.
SetConsoleScreenBufferSize Modifica le dimensioni del buffer dello schermo della console.
SetConsoleTextAttribute Imposta gli attributi del colore.
SetConsoleTitle Imposta il titolo della finestra della console.
GetConsoleTitle Recupera il titolo della finestra della console.

Un processo può usare la funzione FreeConsole per scollegarsi da una console ereditata o da una console creata da AllocConsole.

Un processo può usare la funzione AttachConsole per collegarsi a un'altra sessione della console esistente dopo aver usato FreeConsole per scollegarsi dalla propria sessione (o se non è presente alcuna sessione collegata).