Compartilhar via


Criação de um console

O sistema cria um console ao iniciar um processo de console, um processo de modo de caractere cujo ponto de entrada é a função principal. Por exemplo, o sistema cria um console ao iniciar o processador de comandos cmd.exe. Quando o processador de comandos inicia um novo processo do console, o usuário pode especificar se o sistema cria um console para o novo processo ou se herda o console do processador de comandos.

Um processo pode criar um console usando um dos seguintes métodos:

  • Uma GUI (interface gráfica do usuário) ou um processo de console pode usar a função CreateProcess com CREATE_NEW_CONSOLE para criar um processo de console com um novo console. (Por padrão, um processo de console herda o console do processo pai e não há nenhuma garantia de que a entrada seja recebida pelo processo ao qual foi destinada.)
  • Um processo de GUI ou de console que não está anexado a um console pode usar a função AllocConsole para criar um console. (Os processos de GUI não são anexados a um console quando são criados. Os processos de console não serão anexados a um console se forem criados usando CreateProcess com DETACHED_PROCESS.)

Normalmente, um processo usa AllocConsole para criar um console quando ocorre um erro que requer interação com o usuário. Por exemplo, um processo da GUI pode criar um console quando ocorre um erro que impede que ele use sua interface gráfica normal ou um processo de console que normalmente não interage com o usuário pode criar um console para exibir um erro.

Um processo também pode criar um console especificando o sinalizador CREATE_NEW_CONSOLE em uma chamada para CreateProcess. Esse método cria um console que é acessível para o processo filho, mas não para o processo pai. Consoles separados permitem que os processos pai e filho interajam com o usuário sem conflitos. Se esse sinalizador não for especificado quando um processo de console for criado, ambos os processos serão anexados ao mesmo console e não haverá nenhuma garantia de que o processo correto receberá a entrada destinada a ele. Os aplicativos podem evitar confusões criando processos filho que não herdam identificadores do buffer de entrada ou habilitando apenas um processo filho por vez a herdar um identificador de buffer de entrada, enquanto impedem que o processo pai leia a entrada do console até que o filho termine.

A criação de um console resulta em uma nova janela de console, bem como buffers de E/S separados para a saída para a tela e a entrada do usuário. O processo associado ao novo console usa a função GetStdHandle para obter os identificadores dos buffers de entrada e de tela do novo console. Esses identificadores permitem que o processo acesse o console.

Quando um processo usa CreateProcess, ele pode especificar uma estrutura STARTUPINFO, cujos membros controlam as características do primeiro novo console (se houver) criado para o processo filho. A estrutura STARTUPINFO especificada na chamada para CreateProcess afetará um console criado se o sinalizador CREATE_NEW_CONSOLE for especificado. Ela também afetará um console criado se o processo filho usar AllocConsole posteriormente. As seguintes características do console podem ser especificadas:

  • Tamanho da janela do novo console, em células de caractere
  • Localização da janela do novo console, em coordenadas de pixels na tela
  • Tamanho do buffer da tela do novo console, em células de caractere
  • Atributos de cor da tela de fundo e texto do buffer de tela do novo console
  • Nome de exibição da barra de título da janela do novo console

O sistema usará valores padrão se os valores de STARTUPINFO não forem especificados. Um processo filho pode usar a função GetStartupInfo para determinar os valores em sua estrutura STARTUPINFO.

Um processo não pode alterar a localização da janela do console na tela, mas as funções de console a seguir estão disponíveis para definir ou recuperar as outras propriedades especificadas na estrutura STARTUPINFO.

Função Descrição
GetConsoleScreenBufferInfo Recupera os atributos de tamanho da janela, de tamanho do buffer e de cor.
SetConsoleWindowInfo Altera o tamanho da janela do console.
SetConsoleScreenBufferSize Altera o tamanho do buffer da tela do console.
SetConsoleTextAttribute Define os atributos de cor.
SetConsoleTitle Define o título da janela do console.
GetConsoleTitle Recupera o título da janela do console.

Um processo pode usar a função FreeConsole para se desanexar de um console herdado ou de um console criado por AllocConsole.

Um processo pode usar a função AttachConsole para se anexar a outra sessão de console existente depois de usar FreeConsole para se desanexar da própria sessão (ou se não houver nenhuma sessão anexada).