Condividi tramite


Funzioni di input e output della console di alto livello

Le funzioni ReadFile e WriteFile o ReadConsole e WriteConsole consentono a un'applicazione di leggere l'input della console e scrivere l'output della console come flusso di caratteri. ReadConsole e WriteConsole si comportano esattamente come ReadFile e WriteFile, ad eccezione del fatto che possono essere usate come funzioni a caratteri wide (in cui gli argomenti di testo devono usare Unicode) o come funzioni ANSI (in cui gli argomenti di testo devono usare caratteri del set di caratteri di Windows). Le applicazioni che devono gestire un singolo set di origini per supportare Unicode o il set di caratteri ANSI devono usare ReadConsole e WriteConsole.

ReadConsole e WriteConsole possono essere usati solo con handle della console; ReadFile e WriteFile possono essere usati con altri handle, ad esempio file o pipe. ReadConsole e WriteConsole hanno esito negativo se usati con un handle standard reindirizzato e non è più un handle della console.

Per ottenere l'input da tastiera, un processo può usare ReadFile o ReadConsole con un handle per il buffer di input della console oppure può usare ReadFile per leggere l'input da un file o una pipe se STDIN è stato reindirizzato. Queste funzioni restituiscono solo gli eventi della tastiera che possono essere convertiti in caratteri ANSI o Unicode. L'input che può essere restituito include combinazioni di tasti di controllo. Le funzioni non restituiscono eventi della tastiera che coinvolgono i tasti di funzione o i tasti di direzione. Gli eventi di input generati da mouse, finestra, stato attivo o input di menu vengono eliminati.

Se la modalità di input della riga è abilitata (modalità predefinita), ReadFile e ReadConsole non tornano all'applicazione chiamante finché non viene premuto INVIO. Se la modalità di input della riga è disabilitata, le funzioni non restituiscono finché non è disponibile almeno un carattere. In entrambe le modalità, tutti i caratteri disponibili vengono letti finché non sono disponibili altre chiavi o il numero specificato di caratteri è stato letto. I caratteri non letti vengono memorizzati nel buffer fino alla successiva operazione di lettura. Le funzioni segnalano il numero totale di caratteri effettivamente letti. Se la modalità di input echo è abilitata, i caratteri letti da queste funzioni vengono scritti nel buffer dello schermo attivo nella posizione corrente del cursore.

Un processo può usare WriteFile o WriteConsole per scrivere in un buffer dello schermo attivo o inattivo oppure può usare WriteFile per scrivere in un file o una pipe se STDOUT è stato reindirizzato. La modalità di output elaborata e il wrapping in modalità di output EOL controllano la modalità di scrittura o eco dei caratteri in un buffer dello schermo.

I caratteri scritti da WriteFile o WriteConsole, o restituiti da ReadFile o ReadConsole, vengono inseriti in un buffer dello schermo nella posizione corrente del cursore. Man mano che viene scritto ogni carattere, la posizione del cursore passa alla cella di caratteri successiva; Tuttavia, il comportamento alla fine di una riga dipende dal wrapping del buffer dello schermo della console in modalità di output EOL.

Ulteriori dettagli sulla posizione del cursore sono disponibili tramite sequenze di terminali virtuali, in particolare nella categoria dello stato della query per trovare la posizione corrente e la categoria di posizionamento del cursore per impostare la posizione corrente. In alternativa, un'applicazione può usare la funzione GetConsoleScreenBufferInfo per determinare la posizione corrente del cursore e la funzione SetConsoleCursorPosition per impostare la posizione del cursore. Tuttavia, il meccanismo di sequenze di terminale virtuale è preferibile per tutti gli sviluppi nuovi e in corso. Per altre informazioni sulla strategia alla base di questa decisione, vedere la documentazione sulle funzioni classiche rispetto al terminale virtuale e alla roadmap dell'ecosistema.

Per un esempio che usa le funzioni di I/O della console di alto livello, vedere Uso delle funzioni di input e output di alto livello.