| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Определить нажатие двух кнопок на клаве |
| Автор: Sunvas 7.12.2007, 13:24 |
| Как отловить нажатие двух кнопок на клавиатуре? Например, двух Shift-ов. Уже час роюсь в нэте - ничего не могу найти. Может статейку кто подскажет? |
| Автор: SABROG 7.12.2007, 13:42 |
| Когда нажимаешь кнопку, то с контроллера приходит один опкод, при отпускании другой. Можно создать массив флагов, скажем 101 бит на каждую клавишу. Одновременное нажатие шифтов это приход подряд двух опкодов. Выставляешь биты соответствующие двум шифтам в 1. В обработчике чтения опкодов делаешь проверку, если приходят опкоды на отпускание клавиш, то флаги сбрасываешь в 0. По идее все, с битов можно считать какие клавиши не отпускались, т.е. нажаты. |
| Автор: Sunvas 7.12.2007, 13:51 |
| SABROG, можно хоть небольшой пример? |
| Автор: SABROG 7.12.2007, 14:06 |
| Зависит от того под чем программа должна работать. DOS, Win, *nix ? Вот держи ссылку на http://homepages.cwi.nl/~aeb/linux/kbd/scancodes.html#toc9 по контроллерам клавиатуры. Если прога под чистый дос/win95, то ты сможешь работать с контроллером клавиатуры напрямую. Если винда, то придется либо писать драйвер, либо изучать API функции, но это уже к MSDNу. |
| Автор: Sunvas 7.12.2007, 14:32 |
| Прога под чистый дос. |
| Автор: SABROG 7.12.2007, 14:52 |
| INT 16h, AH = 02h, 12h, 22h — Считать состояние клавиатуры Ввод: АН = 02h (83/84-key), 12h (101/102-key), 22h (122-key) Вывод: AL = байт состояния клавиатуры 1 АН = байт состояния клавиатуры 2 (только для функций 12h и 22h) Байт состояния клавиатуры 1 (этот байт всегда расположен в памяти по адресу 0000h:0417h или 0040h:0017h): Бит 7: Ins включена Бит 6: CapsLock включена Бит 5: NumLock включена Бит 4: ScrollLock включена Бит 3: Alt нажата (любая Alt для функции 02h, часто только левая Alt для 12h/22h) Бит 2: Ctrl нажата (любая Ctrl) Бит 1: Левая Shift нажата Бит 0: Правая Shift нажата Байт состояния клавиатуры 2 (этот байт всегда расположен в памяти по адресу 0000h:0418h или 0040h:0018h): Бит 7: SysRq нажата Бит 6: CapsLock нажата Бит 5: NumLock нажата Бит 4: ScrollLock нажата Бит 3: Правая Alt нажата Бит 2: Правая Ctrl нажата Бит 1: Левая Alt нажата Бит 0: Левая Ctrl нажата |