Partilhar via


Criação de uma consola

O sistema cria um novo console quando inicia um processo de console, um processo de modo de personagem cujo ponto de entrada é a função principal . Por exemplo, o sistema cria um novo console quando inicia o processador cmd.exede comando. Quando o processador de comandos inicia um novo processo de console, o usuário pode especificar se o sistema cria um novo 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 interface gráfica do usuário (GUI) ou 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 pai e não há garantia de que a entrada seja recebida pelo processo para o qual foi destinada.)
  • Uma GUI ou processo de console que não está atualmente conectado a um console pode usar a função AllocConsole para criar um novo console. (Os processos 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 GUI pode criar um console quando ocorre um erro que o impede de usar 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 novo console que é acessível ao processo filho, mas não ao processo pai. Consoles separados permitem que os processos pai e filho interajam com o usuário sem conflito. 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 há garantia de que o processo correto receberá a entrada destinada a ele. Os aplicativos podem evitar confusão criando processos filho que não herdam identificadores do buffer de entrada ou habilitando apenas um processo filho de cada vez para herdar um identificador de buffer de entrada enquanto impedem que o processo pai leia a entrada do console até que o filho tenha terminado.

A criação de um novo console resulta em uma nova janela do console, bem como buffers de E/S separados para saída para a tela e entrada do usuário. O processo associado ao novo console usa a função GetStdHandle para obter os identificadores dos buffers de entrada e tela do novo console. Essas alças 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 afeta um console criado se o sinalizador CREATE_NEW_CONSOLE for especificado. Isso também afeta um console criado se o processo filho usar posteriormente AllocConsole. As seguintes características do console podem ser especificadas:

  • Tamanho da nova janela do console, em células de caracteres
  • Localização da nova janela da consola, em coordenadas de píxeis do ecrã
  • Tamanho do buffer de tela do novo console, em células de caracteres
  • Atributos de texto e cor de plano de fundo do buffer de tela do novo console
  • Nome de exibição para a barra de título da janela do novo console

O sistema usa valores padrão se os valores 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 o local de sua janela de console na tela, mas as seguintes funções de console estão disponíveis para definir ou recuperar as outras propriedades especificadas na estrutura STARTUPINFO .

Função Descrição
GetConsoleScreenBufferInfo Recupera o tamanho da janela, o tamanho do buffer de tela e os atributos de cor.
SetConsoleWindowInfo Altera o tamanho da janela do console.
SetConsoleScreenBufferSize Altera o tamanho do buffer de 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 separar de um console herdado ou de um console criado por AllocConsole.

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