Сборник по задачам и примерам Assembler



Организация низкоуровнего консольного ввода-вывода - часть 2


  • nLength — размер во входных записях буфера, на который указывает указатель lpBuffer;
  • lpNumberOfEventsRead — определяет переменную, в которую записывается

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

  • Запись входного буфера консоли имеет структуру, называемую INPUTRECORD. Ее описание на языке C++ выглядит так:

    typedef struct _INPUT_RECORD { WORD EventType; union {

    KEYJVENT_RECORD KeyEvent;

    MOUSE_EVENT_RECORD MouseEvent;

    WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;

    MENU_EVENT_RECORD MenuEvent:

    FOCUSJVENT_RECORD FocusEvent;

    } Event: } INPUT_RECORD;

    В этой структуре первое поле EventType размером в слово содержит тип события, а второе поле Event является объединением различных структур. Поля какой из структур будут заполнены, определяется типом события, то есть первым полем, которое может принимать значения:

  • KEY_EVENT=0001h - поле Event содержит структуру KEYEVENTRECORD с информацией относительно события клавиатуры;
  • MOUSE_EVENT=0002h — ноле Event содержит структуру

    MOUSEEVENTRECORD с информацией относительно движения мыши или нажатия кнопки;

  • WINDOW_BUFFER_SIZE_EVENT-O004h - поле Event содержит структуру
    WINDOW_ BUFFER_SIZE_RECORD с информацией относительно нового размера экранного буфера;
  • MENU_EVENT=OOO8h — поле Event содержит структуру MENUEVENTRECORD (это событие используется внутри Windows и должно игнорироваться);
  • FOCUS_EVENT=0010h - поле Event содержит структуру FOCUSEVENTRECORD (это

    событие используется внутри Windows и должно игнорироваться).

  • Для обработки события мыши структура MOUSEEVENTRECORD выглядит так:

    typedef struct _MOUSE_EVENT_RECORD {

    COORD dwMousePosition;

    DWORD dwButtonState;

    DWORD dwControlKeyState:

    DWORD dwEventFlags;
    } MOUSE_EVENT_RECORD;

    Исходя из вышесказанного структура INPUTRECORD для обработки событий мыши в программе на ассемблере должна выглядеть так:

    INPUT_RECORD struc EventType dw 0 dwMousePosition struc x dw 0 у dw 0 ends

    dwButtonState dw 0 dwControlKeyState dw 0 DwEventFlags dw 0 ends

    Поле EventType для события мыши содержит значение MOUSE_EVENT=0002h, а поля структуры MOUSEEVENTRECORD соответственно означают следующее:




    Содержание  Назад  Вперед