Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Высокоуровневые функции ввода и вывода консоли




Функции ReadFile(), WriteFile(), ReadConsole() и WriteConsole() позволяет приложению читать консольный ввод или записывать вывод как поток символов. Функции ReadConsole() и WriteConsole() действуют точно так же, как и ReadFile() и WriteFile() за исключением того, что они могут быть использованы или как Unicode-функции (с текстовыми параметрами типа Unicode) или как ANSI-функции (с текстовыми параметрами типа ANSI). Приложения, которые нуждаются в поддержке символов Unicode или ANSI должны использовать функции ReadConsole() и WriteConsole().

Функции ReadConsole() и WriteConsole() могут быть использованы только с дескрипторами консоли; функции ReadFile() и WriteFile() могут быть использованы с другими дескрипторами, такими как файлы или каналы. Функции ReadConsole() и WriteConsole() завершаются с ошибкой, если используются со стандартным дескриптором, который был перенаправлен и не является более консольным дескриптором.

Для получения ввода с клавиатуры процесс может использовать функции ReadFile() и ReadConsole() с дескриптором буфера ввода или он может использовать ReadFile() читать ввод из файла или канала, если STDIN был перенаправлен. Эти функции только возвращают события клавиатуры, которые могут быть транслированы в символы ANSI (или символы Unicode в случае использования ReadConsole()). Ввод, который может быть возвращен, включает комбинации управляющих клавиш. Функции не возвращают события клавиатуры, включающие функциональные клавиши или клавиши управления курсором. События ввода, генерируемые мышью, окном, получением фокуса или вызовом меню игнорируются.

Если режим ввода строк включен (режим по умолчанию), ReadFile() и ReadConsole() не возвращают управление вызывающему приложению, пока не будет нажата клавиша Enter. Если режим ввода строк запрещен, функции не возвратят управление до тех пор, пока не будет введен хотя бы один символ. В любом режиме все доступные символы читаются до тех пор, пока все они не будут прочитаны или не будет прочитано заданное число символов. Непрочитанные символы буферизуются до следующей операции чтения. Функции возвращают общее число фактически прочитанных символов. Если режим эхо-отображения включен, символы записываются в активный дисплейный буфер в текущую позицию курсора.

Процесс может использовать функции WriteFile() или WriteConsole() для записи в активный или неактивный дисплейный буфер или использовать функцию WriteFile() для записи в файл или канал, если STDOUT будет перенаправлен. Режим вывода и режим переноса строк управляют способом записи символом в экранный буфер.

Символы, записываемые функциями WriteFile() или WriteConsole() или эхо-отображаемые функциями ReadFile() или ReadConsole() вставляются в дисплейный буфер в текущую позицию курсора. После записи символа позиция курсора изменяется, перемещаясь к следующему знакоместу. Тем не менее, поведение курсора в конце строки зависит от установленного режима переноса символов в конце строки. Приложение может использовать функцию GetConsoleScreenBufferInfo() для получения текущей позиции курсора и SetConsoleCursorPosition() для ее установки.

 

Низкоуровневые функции ввода и вывода консоли

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

· получать события мыши и события изменения размеров дисплейного буфера;

· получать расширенную информацию о событиях клавиатуры;

· записывать входные записи во входной буфер;

· читать входные записи без удаления их из входного буфера;

· получать информацию об еще необработанных событиях, находящихся во входном буфере;

· очищать входной буфер;

· читать и записывать строки Unicode или ANSI символов в указанную позицию дисплейного буфера;

· читать и записывать строки текста и атрибуты цвета фона в заданную позицию дисплейного буфера;

· читать или записывать прямоугольные блоки символов и атрибутов цвета в заданную позицию дисплейного буфера;

· читать и записывать Unicode или ANSI символ, или текст и цветовые атрибуты в указанное число последовательно расположенных знакомест дисплейного буфера.

 

Низкоуровневые режимы консоли

Типы событий, записываемых во входной буфер консоли, зависят от установленных входных режимов окна и мыши. Входной режим консоли определяет то, каким образом система обрабатывает комбинацию клавиш ctrl+c. Для установки или получения входных режимов консоли приложение должно определить дескриптор входного буфера консоли с помощью функций SetConsoleMode() или GetConsoleMode(). В следующей таблице перечислены режимы, которые можно использовать совместно с входными дескрипторами консоли.

Таблица

Входные режимы консоли

Режим Описание

ENABLE_MOUSE_INPUT

  Управляет записью событий мыши во входной буфер. По умолчанию, ввод от мыши включен и ввод окна отключен. Изменение любого из этих режимов оказывает влияние только на последующий ввод; необработанные события мыши или окна не сбрасываются. Указатель мыши отображается независимо от режима мыши

ENABLE_WINDOW_INPUT

  Управляет тем, будут ли события изменения размеров дисплейного буфера записываться во входной буфер. По умолчанию, ввод от мыши включен и ввод окна отключен. Изменение любого из этих режимов оказывает влияние только на последующий ввод; необработанные события мыши или окна не сбрасываются. Указатель мыши отображается независимо от режима мыши

ENABLE_PROCESSED_INPUT

  Управляет обработкой ввода приложениями, использующими высокоуровневые функции ввода/вывода. Тем не менее, если этот режим включен, комбинация ctrl+c не записывается во входной буфер консоли; вместо этого он передается соответствующей функции

 

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

Низкоуровневые функции ввода консоли

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

Win32 API предоставляет пять низкоуровневых функций для получения доступа к входному буферу консоли:

· ReadConsoleInput

· PeekConsoleInput

· GetNumberOfConsoleInputEvents

· WriteConsoleInput

· FlushConsoleInputBuffer

 

Функции ReadConsoleInput(), PeekConsoleInput() и WriteConsoleInput() используют структуру INPUT_RECORD для чтения данных из буфера и записи в него.

Таблица










Последнее изменение этой страницы: 2018-04-12; просмотров: 385.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...