Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
En konsolprocess använder referenser för att komma åt indata- och skärmbuffertar i konsolen. En process kan använda funktionen GetStdHandle, CreateFile eller CreateConsoleScreenBuffer för att öppna en av dessa referenser.
Funktionen GetStdHandle tillhandahåller en mekanism för att hämta standardindata (STDIN), standardutdata (STDOUT) och standardfel (STDERR) som är associerade med en process. När konsolen skapas skapar systemet dessa referenser.
STDIN Inledningsvis är ett handtag till konsolens indatabuffert och STDOUTSTDERR är handtag för konsolens aktiva skärmbuffert. Funktionen SetStdHandle kan dock omdirigera standardreferenserna genom att ändra handtaget som är associerat med STDIN, STDOUTeller STDERR. Eftersom den överordnades standardreferenser ärvs av en underordnad process returnerar efterföljande anrop till GetStdHandle det omdirigerade handtaget. Ett handtag som returneras av GetStdHandle kan därför referera till något annat än konsol-I/O. Innan du till exempel skapar en underordnad process kan en överordnad process använda SetStdHandle för att ange att ett rörhandtag ska vara det STDIN handtag som ärvs av den underordnade processen. När den underordnade processen anropar GetStdHandle hämtar den rörhandtaget. Det innebär att den överordnade processen kan styra standardreferenserna för den underordnade processen. Handtagen som returneras av GetStdHandle har GENERIC_READ | GENERIC_WRITE åtkomst om inte SetStdHandle har använts för att ange standardreferensen så att den har mindre åtkomst.
Värdet för referenserna som returneras av GetStdHandle är inte 0, 1 och 2, så standardpredefinierade strömkonstanter i Stdio.h (STDIN, STDOUToch STDERR) kan inte användas i funktioner som kräver ett konsolhandtag.
Funktionen CreateFile gör det möjligt för en process att få ett handtag till konsolens indatabuffert och aktiva skärmbuffert, även om STDIN och STDOUT har omdirigerats. Om du vill öppna en referens till en konsols indatabuffert anger du CONIN$ värdet i ett anrop till CreateFile. Ange värdet CONOUT$ i ett anrop till CreateFile för att öppna ett handtag till en konsols aktiva skärmbuffert.
Med CreateFile kan du ange läs-/skrivåtkomst för referensen som den returnerar.
Funktionen CreateConsoleScreenBuffer skapar en ny skärmbuffert och returnerar ett handtag. Det här handtaget kan användas i alla funktioner som accepterar ett handtag till konsolutdata. Den nya skärmbufferten är inte aktiv (visas) förrän dess handtag har angetts i ett anrop till funktionen SetConsoleActiveScreenBuffer . Observera att om du ändrar den aktiva skärmbufferten påverkas inte handtaget som returneras av GetStdHandle. Att använda SetStdHandle för att ändra STDOUT handtaget påverkar inte heller den aktiva skärmbufferten.
Konsolhandtag som returneras av CreateFile och CreateConsoleScreenBuffer kan användas i någon av de konsolfunktioner som kräver ett handtag till en konsols indatabuffert eller en konsolskärmsbuffert. Referenser som returneras av GetStdHandle kan användas av konsolfunktionerna om de inte har omdirigerats för att referera till något annat än konsol-I/O. Om ett standardhandtag har omdirigerats för att referera till en fil eller ett rör kan handtaget dock bara användas av funktionerna ReadFile och WriteFile .
GetFileType kan hjälpa dig att avgöra vilken enhetstyp handtaget refererar till. Ett konsolhandtag visas som FILE_TYPE_CHAR.
En process kan använda funktionen DuplicateHandle för att skapa en dubblettkonsolreferens som har annan åtkomst eller ärverbarhet än det ursprungliga handtaget. Observera dock att en process endast kan skapa en dubblettkonsolreferens för eget bruk. Detta skiljer sig från andra referenstyper (till exempel fil-, pipe- eller mutex-objekt), för vilka DuplicateHandle kan skapa en dubblett som är giltig för en annan process. Åtkomst till en konsol måste delas när den andra processen skapas eller begäras av den andra processen via AttachConsole-mekanismen .
Om du vill stänga ett konsolhandtag kan en process använda funktionen CloseHandle .