Прочитать на английском

Поделиться через


Функция SetConsoleMode

Задает режим ввода для входного буфера консоли или режим вывода для буфера экрана консоли.

Синтаксис

BOOL WINAPI SetConsoleMode(
  _In_ HANDLE hConsoleHandle,
  _In_ DWORD  dwMode
);

Параметры

hConsoleHandle [ввод]
Дескриптор входного буфера консоли или буфера экрана консоли. Этот дескриптор должен иметь право доступа GENERIC_READ. Дополнительные сведения см. в статье Безопасность и права доступа для буфера консоли.

dwMode [ввод]
Устанавливаемый режим ввода или вывода.

Если в качестве входного дескриптора используется параметр hConsoleHandle, режим может быть одним из следующих. При создании консоли все режимы ввода, кроме ENABLE_WINDOW_INPUT и ENABLE_VIRTUAL_TERMINAL_INPUT, включены по умолчанию.

Значение Значение
ENABLE_ECHO_INPUT 0x0004 Символы, считанные функцией ReadFile или ReadConsole, записываются в активный буфер экрана по мере ввода в консоли. Этот режим можно использовать только в том случае, если также включен режим ENABLE_LINE_INPUT.
ENABLE_INSERT_MODE 0x0020 Если этот режим включен, вводимый в окне консоли текст будет вставлен по текущему расположению курсора, а весь последующий текст не будет перезаписан. Если этот режим отключен, весь последующий текст будет перезаписан.
ENABLE_LINE_INPUT 0x0002 Функция ReadFile или ReadConsole возвращает значение только в том случае, если считан символ возврата каретки. Если этот режим отключен, функции возвращают значение при доступности одного или нескольких символов.
ENABLE_MOUSE_INPUT 0x0010 Если указатель мыши находится в границах окна консоли и окно находится в фокусе для ввода текста с клавиатуры, события мыши, связанные с ее перемещением и нажатиями кнопок, помещаются во входной буфер. Такие события удаляются функцией ReadFile или ReadConsole, даже если этот режим включен. Функцию ReadConsoleInput можно использовать для считывания входных записей MOUSE_EVENT из входного буфера.
ENABLE_PROCESSED_INPUT 0x0001 Нажатие клавиш CTRL+C обрабатывается системой и не помещается во входной буфер. Если входной буфер считывается функцией ReadFile или ReadConsole, нажатия других управляющих клавиш обрабатываются системой и не возвращаются в буфере ReadFile или ReadConsole. Если также включен режим ENABLE_LINE_INPUT, символы стирания назад, возврата каретки и перевода строки обрабатываются системой.
ENABLE_QUICK_EDIT_MODE 0x0040 Этот флаг позволяет пользователю использовать мышь для выбора и редактирования текста. Чтобы включить этот режим, используйте ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS. Чтобы отключить этот режим, используйте ENABLE_EXTENDED_FLAGS без этого флага.
ENABLE_WINDOW_INPUT 0x0008 Действия пользователей, которые приводят к изменению буфера экрана консоли, регистрируются во входном буфере консоли. Сведения о таких событиях могут быть считаны приложениями из входного буфера с помощью функции ReadConsoleInput, но не могут быть считаны приложениями, использующими ReadFile или ReadConsole.
ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200 Этот флаг указывает модулю обработки виртуального терминала преобразовать ввод пользователя, полученный в окне консоли, в последовательности виртуального терминала консоли, которые вспомогательное приложение может получить с помощью функций WriteFile или WriteConsole.

Обычно этот флаг рекомендуется использовать вместе с флагом ENABLE_VIRTUAL_TERMINAL_PROCESSING для выходного дескриптора, чтобы обеспечить подключение к приложению, которое обменивается данными исключительно через последовательности виртуального терминала.

Если в качестве дескриптора буфера экрана используется параметр hConsoleHandle, режим может быть одним из следующих. При создании буфера экрана оба режима вывода включены по умолчанию.

Значение Значение
ENABLE_PROCESSED_OUTPUT 0x0001 Символы, записываемые функцией WriteFile или WriteConsole либо выводимые функцией ReadFile или ReadConsole, анализируются для управляющих последовательностей ASCII, после чего выполняется нужное действие. Обрабатываются символы стирания назад, возврата каретки и перевода строки. Этот режим следует включить, если используются управляющие последовательности или задано значение ENABLE_VIRTUAL_TERMINAL_PROCESSING.
ENABLE_WRAP_AT_EOL_OUTPUT 0x0002 При записи с помощью функции WriteFile или WriteConsole либо выводе с помощью функции ReadFile или ReadConsole курсор перемещается в начало следующей строки, если он достиг конца текущей строки. Это приводит к тому, что строки, отображаемые в окне консоли, автоматически прокручиваются вверх, если курсор переходит далее с последней строки в окне. Кроме того, содержимое буфера экрана консоли также прокручивается вверх (с удалением верхней строки в буфере экрана консоли), если курсор переходит далее с последней строки в буфере экрана консоли. Если этот режим отключен, последний символ в строке будет перезаписан последующими символами.
ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 При записи с помощью функции WriteFile или WriteConsole символы обрабатываются для VT100 и аналогичных управляющих символьных последовательностей, которые управляют перемещением курсора, цветом и режимом шрифта, а также другими операциями, доступными для выполнения через существующие API-интерфейсы консоли. Дополнительные сведения см. в статье Последовательности виртуального терминала консоли.
При использовании этого флага убедитесь, что установлен флаг ENABLE_PROCESSED_OUTPUT.
DISABLE_NEWLINE_AUTO_RETURN 0x0008 При записи с помощью функции WriteFile или WriteConsole к переносу в конце строки добавляется дополнительное состояние, которое задерживает перемещение курсора и помещает операции прокрутки в буфер.

Как правило, если флаг ENABLE_WRAP_AT_EOL_OUTPUT установлен и текст достигает конца строки, курсор немедленно переходит на следующую строку, а содержимое буфера прокручивается на одну строку. Но если задан этот флаг, курсор не переходит на следующую строку, а операция прокрутки не выполняется. Записанный символ будет выведен в последней позиции строки, а курсор будет располагаться над этим символом (как в случае с отключенным флагом ENABLE_WRAP_AT_EOL_OUTPUT). Но следующий печатаемый символ будет выведен таким образом, как если бы флаг ENABLE_WRAP_AT_EOL_OUTPUT был включен. Перезапись при этом не выполняется. В частности, курсор быстро переходит на следующую строку, при необходимости выполняется прокрутка, символ выводится, а курсор передвигается еще на одну позицию.

Обычно этот флаг рекомендуется использовать вместе с флагом ENABLE_VIRTUAL_TERMINAL_PROCESSING, что позволяет оптимально сымитировать эмулятор терминала, в котором запись последнего символа на экране (в правом нижем углу) без немедленной прокрутки является желаемым поведением.
ENABLE_LVB_GRID_WORLDWIDE 0x0010 API-интерфейсы для записи атрибутов символов, в том числе WriteConsoleOutput и WriteConsoleOutputAttribute, позволяют использовать флаги атрибутов символов для изменения цвета переднего плана и фона текста. Кроме того, некоторые флаги DBCS указываются с префиксом COMMON_LVB. Исторически эти флаги работали только в кодовых страницах DBCS для китайского, японского и корейского языков.

За исключением флагов начальных и конечных байтов оставшиеся флаги, описывающие отрисовку строки и обратный видеовывод (смена местами цветов переднего плана и фона), можно использовать и с другими языками для выделения определенных частей выходных данных.

Установка этого флага режима консоли позволяет использовать эти атрибуты для каждой кодовой страницы любого языка.

По умолчанию он отключен для сохранения совместимости с известными приложениями, которые исторически игнорируют такие флаги на компьютерах без поддержки китайского, японского и корейского языков для хранения битов в таких полях (случайно или с собственными целями).

Обратите внимание, что использование режима ENABLE_VIRTUAL_TERMINAL_PROCESSING может привести к установке флагов сетки LVB и обратного видеовывода, хотя этот флаг не включается, если подключенное приложение запрашивает видеовывод с подчеркиванием или инвертированием через последовательности виртуального терминала консоли.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Замечания

Консоль состоит из входного буфера и одного или нескольких буферов экрана. Режим буфера консоли определяет функционирование консоли во время операций ввода-вывода. Один набор констант с флагом используется с дескрипторами ввода, а другой — с дескрипторами буфера экрана (вывод). Задание режимов вывода одного буфера экрана не влияет на режимы вывода других буферов экрана.

Режимы ENABLE_LINE_INPUT и ENABLE_ECHO_INPUT влияют только на процессы, в которых используются ReadFile или ReadConsole для чтения данных из входного буфера консоли. Аналогичным образом режим ENABLE_PROCESSED_INPUT в первую очередь влияет на пользователей ReadFile и ReadConsole, кроме того, что он также определяет, передается ли ввод данных с помощью CTRL+C во входной буфер (для чтения функцией ReadConsoleInput) или в функцию, определенную приложением.

Режимы ENABLE_WINDOW_INPUT и ENABLE_MOUSE_INPUT определяют, будут ли передаваться во входной буфер данные изменения размера окна и действий мыши. Эти события могут считываться с помощью ReadConsoleInput, но они всегда фильтруются с помощью ReadFile и ReadConsole.

Режимы ENABLE_PROCESSED_OUTPUT и ENABLE_WRAP_AT_EOL_OUTPUT влияют только на процессы с использованием ReadFile или ReadConsole и WriteFile или WriteConsole.

Чтобы определить текущий режим входного буфера консоли или буфера экрана, используйте функцию GetConsoleMode.

Примеры

Пример см. в статье о чтении событий входного буфера.

Requirements

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхний колонтитул ConsoleApi.h (через WinCon.h, включая Windows.h)
Библиотека Kernel32.lib
DLL-библиотеки Kernel32.dll

См. также

Функции консоли

Консольные режимы

GetConsoleMode

HandlerRoutine

ReadConsole

ReadConsoleInput

ReadFile

WriteConsole

WriteFile