![]() |
|
|
![]()
|
|
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Как отловить нажатие двух кнопок на клавиатуре? Например, двух Shift-ов. Уже час роюсь в нэте - ничего не могу найти. Может статейку кто подскажет?
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Когда нажимаешь кнопку, то с контроллера приходит один опкод, при отпускании другой.
Можно создать массив флагов, скажем 101 бит на каждую клавишу. Одновременное нажатие шифтов это приход подряд двух опкодов. Выставляешь биты соответствующие двум шифтам в 1. В обработчике чтения опкодов делаешь проверку, если приходят опкоды на отпускание клавиш, то флаги сбрасываешь в 0. По идее все, с битов можно считать какие клавиши не отпускались, т.е. нажаты. |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
SABROG, можно хоть небольшой пример?
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Зависит от того под чем программа должна работать. DOS, Win, *nix ?
Вот держи ссылку на спеку по контроллерам клавиатуры. Если прога под чистый дос/win95, то ты сможешь работать с контроллером клавиатуры напрямую. Если винда, то придется либо писать драйвер, либо изучать API функции, но это уже к MSDNу. Это сообщение отредактировал(а) SABROG - 7.12.2007, 14:22 |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Прога под чистый дос.
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
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 нажата Это сообщение отредактировал(а) SABROG - 7.12.2007, 14:57 |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |