Modos de console de alto nível
Os modos de entrada e saída do console afetam o comportamento das funções de console de alto nível. Todos os seguintes modos de entrada de console são habilitados para o buffer de entrada de um console quando o console é criado:
- Modo de entrada de linha
- Modo de entrada processado
- Modo de entrada de eco
Ambos os modos de saída de console a seguir são habilitados para um buffer de tela de console ao ser criado:
- Modo de saída processado
- Encapsulamento no modo de saída EOL
Os três modos de entrada e o modo de saída processada são projetados para funcionar em conjunto. É melhor habilitar ou desabilitar todos esses modos como um grupo. Quando todos estão habilitados, o aplicativo está no modo "processado", o que significa que a maior parte do processamento é manipulada para o aplicativo. Quando todos estão desativados, o aplicativo está no modo "bruto", ou seja, a entrada não é filtrada e os processamentos são deixados para o aplicativo.
Aplicativos podem usar a função GetConsoleMode para determinar o modo atual de um buffer de entrada do console ou de um buffer de tela. Você pode habilitar ou desabilitar esses modos usando os seguintes valores na função SetConsoleMode. Observe que definir os modos 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 poderá ser um ou mais dos valores a seguir. Quando um console é criado, todos os modos de entrada, exceto por 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 inseridos no console. Esse modo poderá ser usado somente se o modo ENABLE_LINE_INPUT também estiver habilitado. |
ENABLE_INSERT_MODE 0x0020 | Quando habilitado, o texto inserido em uma janela de console será inserido na localização do cursor atual e todo o texto após essa localização não será substituído. Quando desabilitado, todo o texto a seguir será substituído. |
ENABLE_LINE_INPUT 0x0002 | A função ReadFile ou ReadConsole será retornada somente quando um caractere de retorno de carro for lido. Se esse modo estiver desabilitado, as funções serão retornadas 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 registros de entrada MOUSE_EVENT 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 teclas 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, o backspace, o retorno de carro e os caracteres de alimentação de linha serão administrados pelo sistema. |
ENABLE_QUICK_EDIT_MODE 0x0040 | Esse sinalizador permite que o usuário use o mouse para selecionar e editar o texto. Para habilitar esse modo, use ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS . Para desabilitar 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 da tela do console são relatadas no buffer de entrada do console. As informações sobre esses eventos podem ser lidas no buffer de entrada por aplicativos que usam a função ReadConsoleInput, mas não por aquelas que usam ReadFile ou ReadConsole. |
ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200 | Definir esse sinalizador instrui o mecanismo de processamento do Terminal Virtual a converter a entrada do usuário recebida pela janela do console em Sequências de Terminais Virtuais 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 é em conjunto com ENABLE_VIRTUAL_TERMINAL_PROCESSING no identificador 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 poderá ser um ou mais dos valores a seguir. 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 reproduzidos 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, de tabulação, de sino, de retorno de carro e de alimentação de linha são processados. Ele deve ser habilitado ao usar sequências de controle ou quando ENABLE_VIRTUAL_TERMINAL_PROCESSING estiver definido. |
ENABLE_WRAP_AT_EOL_OUTPUT 0x0002 | Ao gravar com WriteFile ou WriteConsole ou reproduzir com ReadFile ou ReadConsole, o cursor passa para o início da próxima linha quando chega ao final da linha atual. Isso faz com que as linhas exibidas na janela do console sejam roladas para cima automaticamente quando o cursor passa da última linha na janela. Isso também faz com que o conteúdo do buffer da tela do console role para cima (../descartando a linha superior do buffer da tela do console) quando o cursor passa da última linha no buffer da tela do console. Se esse modo estiver desabilitado, o último caractere na linha será substituído pelos caracteres subsequentes. |
ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 | Ao gravar 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 de APIs de Console existentes. Para obter mais informações, confira Sequências de terminais virtuais do console. Verifique se ENABLE_PROCESSED_OUTPUT está definido ao usar esse sinalizador. |
DISABLE_NEWLINE_AUTO_RETURN 0x0008 | Ao gravar com o WriteFile ou o WriteConsole, estado adicional ao encapsulamento de fim da linha é adicionado, o 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 fim da linha, o cursor se moverá imediatamente para a próxima linha e o conteúdo do buffer será rolado uma linha para cima. 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 gravado será impresso na posição final da linha e o cursor permanecerá acima desse caractere como se o ENABLE_WRAP_AT_EOL_OUTPUT estivesse desativado, mas o próximo caractere imprimível será impresso como se ENABLE_WRAP_AT_EOL_OUTPUT estivesse ativado. Nenhuma substituição ocorrerá. Especificamente, o cursor avança rapidamente para a próxima linha, uma rolagem é executada, se necessário, o caractere é impresso e o cursor avança mais uma posição. O uso típico desse sinalizador é em conjunto com a configuração ENABLE_VIRTUAL_TERMINAL_PROCESSING a fim de simular melhor um emulador de terminal no qual gravar o caractere final na tela (../no canto inferior direito) sem disparar uma rolagem imediata é o comportamento desejado. |
ENABLE_LVB_GRID_WORLDWIDE 0x0010 | As APIs para gravar atributos de caractere, incluindo WriteConsoleOutput e WriteConsoleOutputAttribute permitem o uso de sinalizadores de atributos de caractere a fim de ajustar a cor do texto em primeiro plano e na tela de fundo. Além disso, um intervalo de sinalizadores DBCS foi especificado com o prefixo COMMON_LVB. Historicamente, esses sinalizadores funcionam apenas em páginas de código DBCS para os idiomas chinês, japonês e coreano. Com exceção dos sinalizadores de byte à esquerda e à direita, os sinalizadores restantes que descrevem o desenho de linha e o vídeo reverso (../alternar cores do primeiro plano e na tela de fundo) podem ser úteis em outros idiomas para enfatizar 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. Ele está desativado por padrão para manter a compatibilidade com aplicativos conhecidos que têm aproveitado historicamente o console, ignorando esses sinalizadores em computadores que não são CJK para armazenar bits nesses campos para as próprias finalidades ou por acidente. Observe que o uso do modo ENABLE_VIRTUAL_TERMINAL_PROCESSING poderá fazer com que os sinalizadores de vídeo reverso e de grade LVB sejam definidos enquanto esse sinalizador ainda estiver desativado se o aplicativo anexado solicitar um vídeo reverso ou subjacente por meio do Sequências de terminais virtuais do console. |