Программирование игр для Windows. Советы профессионала

Статус клавиш


Мы должны иметь возможность определять:

§          Была ли нажата какая-нибудь клавиша;

§          Какая была нажата клавиша;

§          Статус клавиши Shift.

Статус клавиш — это просто битовый вектор (последовательность), со­держащий информацию о клавишах Shift, Alt, Ctrl и других. Эта последова­тельность находится в памяти по адресам 417h и 418h. Мы не будем читать эти ячейки напрямую, а воспользуемся BIOS и Си.

Листинг 3.4 содержит код, позволяющий получить статус клавиш.

Листинг 3.4. Получение статуса клавиш.

#define SHIFT_R         0х0001

#define SHIFT_L         0х0002

#define CTRL            0х0004

#define ALT             0х0008

#define SCROLL_LOCK_ON 0х0010

#define NUM_LOCK_ON     0х0020



#define CAPS_LOCK_ON    0х0040

#define INSERT_MODE     0х0080

#define CTRL_L          0х0100

#define ALT_L           0х0200

#define CTRL_R          0х0400

#define ALT_R           0х0800

#define SCROLL_LOCK_DWN 0х1000

#define NUM_LOCK_DWN    0х2000

#define CAPS_LOCK_DWN   0х4000

#define SYS_REQ_DWN     0х8000

unsigned int Get_Control_Keys(unsigned int mask)

{

// функция возвращает статус интересующей нас управляющей клавиши

return(mask &_bios_keybrd(_KEYBRD_SHIFTSTATUS));

} // конец функции

В листинге 3.4 функция Get_Control_Key() использует вызов BIOS из Си для определения статуса клавиш. В строки #define включены описания масок для определения статусных клавиш, благодаря чему вы можете вызывать функцию Get_Control_Key(), не задумываясь о значении битов состояния. Более того, используя маски и логический оператор AND, за один вызов можно получить сразу несколько состояний.



Содержание раздела