Sdílet prostřednictvím


High-Level konzolové vstupní a výstupní funkce

Funkce ReadFile a WriteFile nebo ReadConsole a WriteConsole umožňují aplikaci číst vstup konzoly a zapisovat výstup konzoly jako datový proud znaků. ReadConsole a WriteConsole se chovají stejně jako ReadFile a WriteFile s tím rozdílem, že je možné je použít jako funkce širokého znaku (ve kterých textové argumenty musí používat Unicode) nebo jako funkce ANSI (ve kterých textové argumenty musí používat znaky ze znakové sady Systému Windows). Aplikace, které potřebují udržovat jednu sadu zdrojů pro podporu unicode nebo znakové sady ANSI, by měly používat ReadConsole a WriteConsole.

ReadConsole a WriteConsole lze použít pouze s obslužnými rutinami konzoly; ReadFile a WriteFile lze použít s jinými popisovači (například soubory nebo kanály). Operace ReadConsole a WriteConsole selžou, pokud se používají se standardním popisovačem, který byl přesměrován a už není popisovačem konzoly.

Pokud chcete získat vstup pomocí klávesnice, může proces použít ReadFile nebo ReadConsole s popisovačem vstupní vyrovnávací paměti konzoly, nebo může použít ReadFile ke čtení vstupu ze souboru nebo kanálu, pokud STDIN byl přesměrován. Tyto funkce vrací jenom události klávesnice, které lze přeložit na znaky ANSI nebo Unicode. Vstup, který lze vrátit, zahrnuje kombinace ovládacích kláves. Funkce nevrací události klávesnice zahrnující funkční klávesy nebo klávesy se šipkami. Vstupní události generované myší, oknem, fokusem nebo vstupem nabídky se zahodí.

Pokud je povolen režim vstupu řádku (výchozí režim), ReadFile a ReadConsole se nevrátí do volající aplikace, dokud se stiskne klávesa ENTER. Pokud je režim zadávání řádku zakázaný, funkce se nevrací, dokud nebude k dispozici alespoň jeden znak. V obou režimech se všechny dostupné znaky čtou, dokud nebudou k dispozici žádné další klíče nebo se přečte zadaný počet znaků. Nepřečtené znaky se ukládají do vyrovnávací paměti až do další operace čtení. Funkce hlásí celkový počet znaků, které se skutečně čtou. Pokud je povolen režim zadávání echo, znaky přečtené těmito funkcemi se zapisují do aktivní vyrovnávací paměti obrazovky v aktuální pozici kurzoru.

Proces může použít WriteFile nebo WriteConsole k zápisu do aktivní nebo neaktivní vyrovnávací paměti obrazovky, nebo může použít WriteFile k zápisu do souboru nebo kanálu v případě přesměrování STDOUT. Zpracovaný výstupní režim a zabalení v režimu výstupu EOL řídí způsob zápisu znaků nebo odezvy do vyrovnávací paměti obrazovky.

Znaky napsané pomocí WriteFile nebo WriteConsole nebo echoed by ReadFile nebo ReadConsole, se vloží do vyrovnávací paměti obrazovky v aktuální pozici kurzoru. Při psaní každého znaku se pozice kurzoru posune na další buňku znaku; Chování na konci řádku však závisí na zalamování vyrovnávací paměti konzoly v režimu výstupu EOL.

Další podrobnosti o pozici kurzoru najdete prostřednictvím posloupností virtuálních terminálů, konkrétně v kategorii stavu dotazu pro vyhledání aktuální pozice a umístění kurzoru pro nastavení aktuální pozice. Případně může aplikace použít funkci GetConsoleScreenBufferInfo k určení aktuální pozice kurzoru a Funkce SetConsoleCursorPosition k nastavení pozice kurzoru. Mechanismus sekvence virtuálních terminálů je však upřednostňovaný pro veškerý nový a průběžný vývoj. Další podrobnosti o strategii za tímto rozhodnutím najdete v klasické funkci a v dokumentaci k přehledu ekosystému a virtuálního terminálu.

Příklad, který používá vstupně-výstupní funkce konzoly vysoké úrovně, viz Použití High-Level vstupní a výstupní funkce.