Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как обрабатывать отпускание клавиши?

686
26 марта 2002 года
shob_vas
9 / / 20.04.2000
Человек нажал на клавишу, подержал, отпустил.
Как узнать что произошло отпускание клавиши?
572
26 марта 2002 года
Chingachguk
29 / / 20.01.2000
Попробуй последить за байтом, считываемым из порта клавиатуры следующим образом:

in al,60h

Значение этого байта будут разными в зависимости от того, нажата клавиша или нет. БИОС также транслирует эти значения примерно так: если клавиша была в нажатом состоянии менее 0,5 сек, то это однократное нажатие, иначе генериться примерно 10 нажатий в секунду (на 83 клавишной клаве это делалось аппартно). Исследовать процесс можно также повесив свой хэндлер на стандартный обработчик БИОС-а.
Аноним
Цитата:

БИОС также транслирует эти значения примерно так если клавиша была в нажатом состоянии менее 0,5 сек, то это однократное нажатие, иначе генериться примерно 10 нажатий в секунду (на 83 клавишной клаве это делалось аппартно).


Гон, на 101/104/107 клавиатуре это тоже аппаратно.

686
29 марта 2002 года
shob_vas
9 / / 20.04.2000
Не я попробовал
in al,60h,
ничего не получилось!

Эта процедура обрабатывает нажатие клавиши, а не отпускание!
То есть она читает прямо из буфера.
Аноним
Цитата:

On 2002-03-29 1045, shob_vas wrote
Не я попробовал
in al,60h,
ничего не получилось!


Это на самом деле довольно сложно у меня тоже не сразу получилось

Цитата:

Эта процедура обрабатывает нажатие клавиши, а не отпускание!
То есть она читает прямо из буфера.


Какая процедура? Если ты про in al,60h, то будет и на вашей улице праздник, после нажатия будет отжатие.

461
29 марта 2002 года
gerard
102 / / 20.12.1999
Не забывайте перед in al,60h делать проверку бита 0 порта 64h (in al, 64h; test al, 01h) -если в нем 0, значит очередной сканкод еще не пришел. Кстати, для тех клавиш, которые появились только на расширенной клавиатуре, сканкод состоит из нескольких байтов. Как минимум, добавляется байт E0h (например, для левой Ctrl - 1Dh, а для правой - E0h 1Dh), а в большинстве случаев еще и E0h 2Ah (скажем, для Home/7 на цифровой клавиатуре будет 47h, а для обычной Home - E0h 2Ah E0h 47h). Для клавиши Pause вообще выдается сканкод из 6 байт.

При отпускании клавиши сканкод будет на 80h больше, чем при ее же нажатии. Если сканкод из нескольких байт, то E0h остается, а все остальные также увеличиваются на 80h. Причем если сканкод для нажатия состоит из двух пар байтов, то при отпускании эти пары придут в обратном порядке. Например, при отпускании
левой Ctrl - 9Dh, правой - E0h 9Dh, Home -E0h C7h E0h AAh. Для клавиши Pause сканкод при отпускании вообще не вырабатывается.
686
01 апреля 2002 года
shob_vas
9 / / 20.04.2000
Я проверил еще раз
in al,60h.
Действительно отпускание клавиши там отсвечвается! Спасибо.

Но при этом когда нажата буква, например "а", то в регистре al постоянное значение 30.
А когда я нажимаю клавишу вверх значение непостоянное(72,170,224)! Почему, и что это значит!?
686
01 апреля 2002 года
shob_vas
9 / / 20.04.2000
Я проверил еще раз
in al,60h.
Действительно отпускание клавиши там отсвечвается! Спасибо.

Но при этом когда нажата буква, например "а", то в регистре al постоянное значение 30.
А когда я нажимаю клавишу вверх значение непостоянное(72,170,224)! Почему, и что это значит!?
P.S. Кстати при нажатии клавиш вниз, влево, вправо значение тоже меняется.
461
02 апреля 2002 года
gerard
102 / / 20.12.1999
Все правильно, просто вы, наверно, не успели прочесть мой предыдущий ответ, поэтому еще раз поясню.

Клавиша "а" - на основной клавиатуре, и для нее вырабатывается сканкод из одного байта (как раз 30). Клавиша "стрелка вверх" на цифровой клавиатуре (она же также выдает один байт (как раз 72). При отпускании будет выдан сканкод как при нажатии, только на 128 больше (старший бит 1 вместо 0). То есть для "а" будет 158, а для "стрелки вверх" - 200. Так будет для всех клавиш, которые были на 84-клавишной клавиатуре.

Для тех же клавиш, которые добавились на 101-и 102-клавишной клавиатуре (а это F11 и F12, *,/ и Enter c цифровой клавиатуры, правые Ctrl и Alt, и все клавиши между основной и цифровой клавиатурой) вырабатывается сканкод из нескольких байт (2 или 4). Для "стрелки вверх", если это отдельная клавиша (не на цифровой клавиатуре), будет 224 42 224 72, где 42 - код левой Shift, а 224 - признак расширенного сканкода. При отпускании будет 224 200 224 170 (то есть 224 остается, а 42 и 72 не только увеличиваются на 128, но и ставятся в обратном порядке).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог