Partilhar via


High-Level modos de console

O comportamento das funções de console de alto nível é afetado pelos modos de entrada e saída do console. Todos os seguintes modos de entrada de console são habilitados para o buffer de entrada de um console quando um console é criado:

  • Modo de entrada de linha
  • Modo de entrada processado
  • Modo de entrada de eco

Ambos os seguintes modos de saída do console são habilitados para um buffer de tela do console quando ele é criado:

  • Modo de saída processado
  • Encapsulamento no modo de saída EOL

Todos os três modos de entrada, juntamente com o modo de saída processado, são projetados para trabalhar juntos. É melhor ativar ou desativar todos esses modos como um grupo. Quando todos estão ativados, diz-se que o aplicativo está no modo "cozido", o que significa que a maior parte do processamento é manipulada para o aplicativo. Quando todos estão desativados, o aplicativo está no modo "bruto", o que significa que a entrada não é filtrada e qualquer processamento é deixado para o aplicativo.

Um aplicativo pode usar a função GetConsoleMode para determinar o modo atual do buffer de entrada ou do buffer de tela de um console. Você pode habilitar ou desabilitar qualquer um desses modos usando os seguintes valores na função SetConsoleMode . Observe que definir o modo de saída de um buffer de tela não afeta o modo de saída de outros buffers de tela.

Se o parâmetro hConsoleHandle for um identificador de entrada, o modo pode ser um ou mais dos seguintes valores. Quando um console é criado, todos os modos de entrada, exceto ENABLE_WINDOW_INPUT e ENABLE_VIRTUAL_TERMINAL_INPUT , são habilitados por padrão.

Valor Significado
ENABLE_ECHO_INPUT 0x0004 Os caracteres lidos pela função ReadFile ou ReadConsole são gravados no buffer de tela ativo à medida que são digitados no console. Este modo só pode ser utilizado se o modo ENABLE_LINE_INPUT também estiver ativado.
ENABLE_INSERT_MODE 0x0020 Quando ativado, o texto inserido em uma janela do console será inserido no local atual do cursor e todo o texto após esse local não será substituído. Quando desativado, todo o texto a seguir será substituído.
ENABLE_LINE_INPUT 0x0002 A função ReadFile ou ReadConsole retorna somente quando um caractere de retorno de carro é lido. Se esse modo estiver desativado, as funções retornarão quando um ou mais caracteres estiverem disponíveis.
ENABLE_MOUSE_INPUT 0x0010 Se o ponteiro do mouse estiver dentro das bordas da janela do console e a janela tiver o foco do teclado, os eventos do mouse gerados pelo movimento do mouse e pressionamentos de botão serão colocados no buffer de entrada. Esses eventos são descartados por ReadFile ou ReadConsole, mesmo quando esse modo está habilitado. A função ReadConsoleInput pode ser usada para ler MOUSE_EVENT registros de entrada do buffer de entrada.
ENABLE_PROCESSED_INPUT 0x0001 CTRL+C é processado pelo sistema e não é colocado no buffer de entrada. Se o buffer de entrada estiver sendo lido por ReadFile ou ReadConsole, outras chaves de controle serão processadas pelo sistema e não serão retornadas no buffer ReadFile ou ReadConsole . Se o modo ENABLE_LINE_INPUT também estiver habilitado, os caracteres de backspace, retorno de carro e alimentação de linha serão manipulados pelo sistema.
ENABLE_QUICK_EDIT_MODE 0x0040 Esse sinalizador permite que o usuário use o mouse para selecionar e editar texto. Para habilitar esse modo, use ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS. Para desativar esse modo, use ENABLE_EXTENDED_FLAGS sem esse sinalizador.
ENABLE_WINDOW_INPUT 0x0008 As interações do usuário que alteram o tamanho do buffer de tela do console são relatadas no buffer de entrada do console. As informações sobre esses eventos podem ser lidas do buffer de entrada por aplicativos que usam a função ReadConsoleInput , mas não por aqueles que usam ReadFile ou ReadConsole.
ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200 A definição desse sinalizador direciona o mecanismo de processamento do Terminal Virtual para converter a entrada do usuário recebida pela janela do console em Sequências de Terminal Virtual do Console que podem ser recuperadas por um aplicativo de suporte por meio das funções ReadFile ou ReadConsole .

O uso típico desse sinalizador destina-se em conjunto com ENABLE_VIRTUAL_TERMINAL_PROCESSING na alça de saída para se conectar a um aplicativo que se comunica exclusivamente por meio de sequências de terminais virtuais.

Se o parâmetro hConsoleHandle for um identificador de buffer de tela, o modo pode ser um ou mais dos seguintes valores. Quando um buffer de tela é criado, ambos os modos de saída são habilitados por padrão.

Valor Significado
ENABLE_PROCESSED_OUTPUT 0x0001 Os caracteres gravados pela função WriteFile ou WriteConsole ou ecoados pela função ReadFile ou ReadConsole são analisados para sequências de controle ASCII e a ação correta é executada. Os caracteres de backspace, tab, bell, carriage return e line feed são processados. Ele deve ser ativado ao usar sequências de controle ou quando ENABLE_VIRTUAL_TERMINAL_PROCESSING estiver definido.
ENABLE_WRAP_AT_EOL_OUTPUT 0x0002 Ao escrever com WriteFile ou WriteConsole ou ecoar com ReadFile ou ReadConsole, o cursor se move para o início da próxima linha quando atinge o final da linha atual. Isso faz com que as linhas exibidas na janela do console rolem para cima automaticamente quando o cursor avança além da última linha da janela. Isso também faz com que o conteúdo do buffer de tela do console role para cima (.. /descartando a linha superior do buffer de tela do console) quando o cursor avança além da última linha no buffer de tela do console. Se este modo estiver desativado, o último caractere da linha será substituído por quaisquer caracteres subsequentes.
ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 Ao escrever com WriteFile ou WriteConsole, os caracteres são analisados para VT100 e sequências de caracteres de controle semelhantes que controlam o movimento do cursor, o modo de cor/fonte e outras operações que também podem ser executadas por meio das APIs de console existentes. Para obter mais informações, consulte Sequências de terminal virtual de console.
Verifique se ENABLE_PROCESSED_OUTPUT está definido ao usar esse sinalizador.
DISABLE_NEWLINE_AUTO_RETURN 0x0008 Ao escrever com WriteFile ou WriteConsole, isso adiciona um estado adicional ao encapsulamento de fim de linha que pode atrasar as operações de movimentação do cursor e de rolagem do buffer.

Normalmente, quando ENABLE_WRAP_AT_EOL_OUTPUT é definido e o texto chega ao final da linha, o cursor se move imediatamente para a próxima linha e o conteúdo do buffer rola para cima por uma linha. Em contraste com esse conjunto de sinalizadores, o cursor não se move para a próxima linha e a operação de rolagem não é executada. O caractere escrito será impresso na posição final na linha e o cursor permanecerá acima desse caractere como se ENABLE_WRAP_AT_EOL_OUTPUT estivesse desligado, mas o próximo caractere imprimível será impresso como se ENABLE_WRAP_AT_EOL_OUTPUT estivesse ligado. Nenhuma substituição ocorrerá. Especificamente, o cursor avança rapidamente para a linha seguinte, uma rolagem é executada se necessário, o caractere é impresso e o cursor avança mais uma posição.

O uso típico deste sinalizador destina-se em conjunto com a configuração ENABLE_VIRTUAL_TERMINAL_PROCESSING para melhor emular um emulador de terminal onde escrever o caractere final na tela (.. /no canto inferior direito) sem acionar uma rolagem imediata é o comportamento desejado.
ENABLE_LVB_GRID_WORLDWIDE 0x0010 As APIs para escrever atributos de caractere, incluindo WriteConsoleOutput e WriteConsoleOutputAttribute, permitem o uso de sinalizadores de atributos de caractere para ajustar a cor do primeiro plano e do plano de fundo do texto. Além disso, um intervalo de sinalizadores DBCS foi especificado com o prefixo COMMON_LVB. Historicamente, essas bandeiras só funcionavam em páginas de código DBCS para os idiomas chinês, japonês e coreano.

Com exceção dos sinalizadores de bytes à esquerda e à direita, os sinalizadores restantes que descrevem o desenho de linhas e o vídeo reverso (.. /swap cores de primeiro plano e plano de fundo) pode ser útil para outras linguagens enfatizarem partes da saída.

Definir esse sinalizador de modo de console permitirá que esses atributos sejam usados em todas as páginas de código em todos os idiomas.

É desativado por padrão para manter a compatibilidade com aplicativos conhecidos que historicamente aproveitaram o console ignorando esses sinalizadores em máquinas não-CJK para armazenar bits nesses campos para seus próprios fins ou por acidente.

Observe que o uso do modo ENABLE_VIRTUAL_TERMINAL_PROCESSING pode resultar em sinalizadores de vídeo reversos e grade LVB sendo definidos enquanto esse sinalizador ainda estiver desativado se o aplicativo anexado solicitar sublinhado ou vídeo inverso por meio de Sequências de Terminal Virtual do Console.