Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um processo de console usa identificadores para acessar os buffers de entrada e tela de seu console. Um processo pode usar a função GetStdHandle, CreateFile ou CreateConsoleScreenBuffer para abrir um desses identificadores.
A função GetStdHandle fornece um mecanismo para recuperar os identificadores de entrada padrão (STDIN), saída padrão (STDOUT) e erro padrão (STDERR) associados a um processo. Durante a criação do console, o sistema cria esses identificadores. Inicialmente, STDIN é um identificador para o buffer de entrada do console e STDERRSTDOUT são identificadores do buffer de tela ativo do console. No entanto, a função SetStdHandle pode redirecionar os identificadores padrão alterando o identificador associado STDINa , STDOUTou STDERR. Como as alças padrão do pai são herdadas por qualquer processo filho, as chamadas subsequentes para GetStdHandle retornam o identificador redirecionado. Um identificador retornado por GetStdHandle pode, portanto, fazer referência a algo diferente de E/S do console. Por exemplo, antes de criar um processo filho, um processo pai pode usar SetStdHandle para definir um identificador de pipe como o STDIN identificador herdado pelo processo filho. Quando o processo filho chama GetStdHandle, ele obtém o identificador de pipe. Isso significa que o processo pai pode controlar as alças padrão do processo filho. Os identificadores retornados por GetStdHandle têm GENERIC_READ | GENERIC_WRITE acesso, a menos que SetStdHandle tenha sido usado para definir o identificador padrão para ter acesso menor.
O valor das alças retornadas por GetStdHandle não é 0, 1 e 2, portanto, as constantes de fluxo predefinidas padrão em Stdio.h (STDINSTDOUTe STDERR) não podem ser usadas em funções que exigem um identificador de console.
A função CreateFile permite que um processo obtenha um identificador para o buffer de entrada do console e o buffer de tela ativo, mesmo se STDIN e STDOUT tiver sido redirecionado. Para abrir um identificador para o buffer de entrada de um console, especifique o CONIN$ valor em uma chamada para CreateFile. Especifique o CONOUT$ valor em uma chamada para CreateFile para abrir um identificador para o buffer de tela ativo de um console.
O CreateFile permite que você especifique o acesso de leitura/gravação do identificador que ele retorna.
A função CreateConsoleScreenBuffer cria um novo buffer de tela e retorna um identificador. Esse identificador pode ser usado em qualquer função que aceite um identificador para a saída do console. O novo buffer de tela não está ativo (exibido) até que seu identificador seja especificado em uma chamada para a função SetConsoleActiveScreenBuffer . Observe que alterar o buffer de tela ativo não afeta o identificador retornado por GetStdHandle. Da mesma forma, usar SetStdHandle para alterar o STDOUT identificador não afeta o buffer de tela ativo.
Os identificadores de console retornados por CreateFile e CreateConsoleScreenBuffer podem ser usados em qualquer uma das funções de console que exigem um identificador para o buffer de entrada de um console ou para um buffer de tela do console. Os identificadores retornados por GetStdHandle poderão ser usados pelas funções de console se não tiverem sido redirecionados para se referirem a algo diferente de E/S do console. Se um identificador padrão tiver sido redirecionado para se referir a um arquivo ou um pipe, no entanto, o identificador só poderá ser usado pelas funções ReadFile e WriteFile .
GetFileType pode ajudar a determinar a qual tipo de dispositivo o identificador se refere. Um identificador de console apresenta-se como FILE_TYPE_CHAR.
Um processo pode usar a função DuplicateHandle para criar um identificador de console duplicado que tenha acesso ou herdabilidade diferentes do identificador original. No entanto, observe que um processo pode criar um identificador de console duplicado apenas para seu próprio uso. Isso difere de outros tipos de identificador (como objetos de arquivo, pipe ou mutex), para os quais DuplicateHandle pode criar uma duplicata válida para um processo diferente. O acesso a um console deve ser compartilhado durante a criação do outro processo ou pode ser solicitado pelo outro processo por meio do mecanismo AttachConsole .
Para fechar um identificador de console, um processo pode usar a função CloseHandle .