High-Level-konsolens indata- och utdatafunktioner

Funktionerna ReadFile och WriteFile , eller funktionerna ReadConsole och WriteConsole , gör det möjligt för ett program att läsa konsolens indata och skriva konsolutdata som en ström av tecken. ReadConsole och WriteConsole fungerar exakt som ReadFile och WriteFile förutom att de kan användas antingen som wide-character-funktioner (där textargument måste använda Unicode) eller som ANSI-funktioner (där textargument måste använda tecken från Windows-teckenuppsättningen). Program som behöver underhålla en enda uppsättning källor för att stödja antingen Unicode eller ANSI-teckenuppsättningen bör använda ReadConsole och WriteConsole.

ReadConsole och WriteConsole kan endast användas med konsolhandtag. ReadFile och WriteFile kan användas med andra referenser (till exempel filer eller rör). ReadConsole och WriteConsole misslyckas om de används med ett standardhandtag som har omdirigerats och inte längre är ett konsolhandtag.

För att hämta tangentbordsindata kan en process använda ReadFile eller ReadConsole med ett handtag till konsolens indatabuffert, eller använda ReadFile för att läsa indata från en fil eller ett rör om STDIN det har omdirigerats. Dessa funktioner returnerar endast tangentbordshändelser som kan översättas till ANSI- eller Unicode-tecken. Indata som kan returneras innehåller kombinationer av kontrollnycklar. Funktionerna returnerar inte tangentbordshändelser som involverar funktionstangenterna eller piltangenterna. Indatahändelser som genereras av mus, fönster, fokus eller menyindata ignoreras.

Om radinmatningsläget är aktiverat (standardläget) återgår ReadFile och ReadConsole inte till det anropande programmet förrän RETUR-tangenten har tryckts på. Om radinmatningsläget är inaktiverat returneras inte funktionerna förrän minst ett tecken är tillgängligt. I båda lägena läss alla tillgängliga tecken tills antingen inga fler nycklar är tillgängliga eller det angivna antalet tecken har lästs. Olästa tecken buffrad tills nästa läsåtgärd. Funktionerna rapporterar det totala antalet tecken som faktiskt lästs. Om ekoinmatningsläget är aktiverat skrivs tecken som läss av dessa funktioner till den aktiva skärmbufferten vid den aktuella markörens position.

En process kan använda WriteFile eller WriteConsole för att skriva till antingen en aktiv eller inaktiv skärmbuffert, eller använda WriteFile för att skriva till en fil eller ett rör om STDOUT har omdirigerats. Bearbetat utdataläge och radbyte i EOL-utdataläge styr hur tecken skrivs eller upprepas till en skärmbuffert.

Tecken som skrivs av WriteFile eller WriteConsole, eller som upprepas av ReadFile eller ReadConsole, infogas i en skärmbuffert vid den aktuella markörens position. När varje tecken skrivs går markörens position vidare till nästa teckencell. Beteendet i slutet av en rad beror dock på konsolskärmsbuffertens radbrytning i EOL-utdataläge.

Mer information om markörens position finns i sekvenser med virtuella terminaler, särskilt i frågetillståndskategorin för att hitta den aktuella positionen och markörpositionskategorin för att ange den aktuella positionen. Ett program kan också använda funktionen GetConsoleScreenBufferInfo för att fastställa den aktuella markörens position och funktionen SetConsoleCursorPosition för att ange markörens position. Den virtuella terminalsekvensmekanismen är dock att föredra för all ny och pågående utveckling. Mer information om strategin bakom det här beslutet finns i dokumentationen om klassiska funktioner jämfört med virtuell terminal och ekosystemöversikt .

Ett exempel som använder konsol-I/O-funktionerna på hög nivå finns i Använda High-Level indata- och utdatafunktioner.