Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / Answers (1-20).docx
Скачиваний:
242
Добавлен:
15.06.2014
Размер:
54.64 Кб
Скачать

14. Средства чтения содержимого экрана в Windows.

BOOL ReadConsoleOutputCharacter(HANDLE hConsOut, STR* buffer, DWORD len, COORD dwReadCoord, DWORD *len)

BOOL ReadConsoleOutput(HANDLE hConsOut, CHAR_INFO* cells, COORD dwBufferSize, COORD dwBufferCoord, SMALL_RECT* rect)

BOOL ReadConsoleOutputAttribute(HANDLE hConsOut, WORD* attribs, DWORD len, COORD pos, DWORD* actlen)

ReadConsoleOutputCharacter – функция выполняет чтение символа на экране и переносит в массив buffer.

ReadConsoleOutput – функция чтения символов с их атрибутами на экране. При этом функция читает информацию из прямоугольник rect и переносит её в двумерный массив cells. Также dwBufferCoord – позиция того элемента массива с котрого используется массив а dwBufferSize – размер массива

ReadConsoleOutputAttribute – функция выполняет чтение только аттрибутов и переносит в массив слов attribs.

Число читаемых при этом символов или атрибутов задаётся параметром len, чтение выполняется с позиции экрана задаваемой идентификатором pos, а действительное число прочитанных символов или аттрибутов возвращается с помощью параметра actlen.

15. Средства чтения содержимого экрана в Unix.

В операционной системе Unix отсутствуют стандартные средства чтения символов с экрана. Это объясняется тем, что основные принципы работы с Unix формировались еще в то время, когда основным средством вывода информации для отдельного пользователя интерактивной ОС были телетайпы, осуществляющие вывод на бумажную ленту, считывать информацию с которой было невозможно по техническим причинам.

Одним из устройств, которое позволяет считывать информацию, является "виртуальный экран консоли", обозначаемый в файловой системе Unix как vcs (сокращение от virtual console screen). Заметим, что специальные файлы устройств стандартным образом размещаются в каталоге /dev, поэтому полное наименование устройства виртуального экрана консоли следует задавать в виде /dev/vcs.

Int hscreen;

hscreen = open("/dev/vcs", O_RDONLY, 0600);

Далее можно производить чтение с экрана с помощью функции:

read(hscreen, &buffer, 100)

buffer - массив, в котрый считываются символы

Последний атрибут – сколько байт нужно прочитать

16. Перенастройка консоли Unix для немедленного ввода нажатий отдельных клавиш

Для доступа с клавиатуры нужно открыть специальное виртуальное устройство dev/tty.

hcons = open(“/dev/tty”, O_RDONLY)

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

int tcgetattr(int htty, struct termios *tsave)

int tcsetattr(int htty, int action, srtuct termios *tnew) – установить новые режимы

struct termios sterm, term;

int htty;

htty = open(“/dev/tty”, O_RDONLY);

tcgetattr(htty, &sterm);

tcgetattr(htty, &term);

term.c_lfkag &= ~(ICANON|ECHO);

term.c_cc[VMIN]=1;

term.c_cc[VTIME]=0;

tcsetattr(htty, TCSAFLUSH, &sterm);

17. Программные средства использования мыши в текстовом режиме Windows

В операционной системе Windows информация от мыши получается в результате универсального запроса событий для текстовой консоли посредством вызова функции ReadConsoleInput. При получении указанной функцией сообщения от мыши, поле EventType этого сообщения оказывается равным константе MOUSE_EVENT, а комбинированный компонент Event является записью типа MOUSE_EVENT_RECORD, который определяется в заголовочном файле описанием

typedef struct _MOUSE_EVENT_RECORD {

COORD dwMousePosition;

DWORD dwButtonState;

DWORD dwControlKeyState;

DWORD dwEventFlags;

} MOUSE_EVENT_RECORD, *PMOUSE_EVENT_RECORD;

Компонент dwMousePosition этой структуры дает текущую позицию мыши. Поле dwButtonState выдает код нажатия клавиш мыши и может быть произвольной комбинацией следующих битовых значений:

#define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001

#define RIGHTMOST_BUTTON_PRESSED 0x0002

#define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004

#define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008

#define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010

Поле dwEventFlags позволяет определить двойное нажатие мыши и двигалась ли мышь в момент формирования сообщения.

#define MOUSE_MOVED 0x0001

#define DOUBLE_CLICK 0x0002

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

Соседние файлы в папке Экзамен