Функция 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.
Пример см. в статье о чтении событий входного буфера.
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхний колонтитул | ConsoleApi.h (через WinCon.h, включая Windows.h) |
Библиотека | Kernel32.lib |
DLL-библиотеки | Kernel32.dll |