Как обрабатывать отпускание клавиши?
Как узнать что произошло отпускание клавиши?
in al,60h
Значение этого байта будут разными в зависимости от того, нажата клавиша или нет. БИОС также транслирует эти значения примерно так: если клавиша была в нажатом состоянии менее 0,5 сек, то это однократное нажатие, иначе генериться примерно 10 нажатий в секунду (на 83 клавишной клаве это делалось аппартно). Исследовать процесс можно также повесив свой хэндлер на стандартный обработчик БИОС-а.
Цитата:
БИОС также транслирует эти значения примерно так если клавиша была в нажатом состоянии менее 0,5 сек, то это однократное нажатие, иначе генериться примерно 10 нажатий в секунду (на 83 клавишной клаве это делалось аппартно).
Гон, на 101/104/107 клавиатуре это тоже аппаратно.
in al,60h,
ничего не получилось!
Эта процедура обрабатывает нажатие клавиши, а не отпускание!
То есть она читает прямо из буфера.
Цитата:
On 2002-03-29 1045, shob_vas wrote
Не я попробовал
in al,60h,
ничего не получилось!
Это на самом деле довольно сложно у меня тоже не сразу получилось
Цитата:
Эта процедура обрабатывает нажатие клавиши, а не отпускание!
То есть она читает прямо из буфера.
Какая процедура? Если ты про in al,60h, то будет и на вашей улице праздник, после нажатия будет отжатие.
При отпускании клавиши сканкод будет на 80h больше, чем при ее же нажатии. Если сканкод из нескольких байт, то E0h остается, а все остальные также увеличиваются на 80h. Причем если сканкод для нажатия состоит из двух пар байтов, то при отпускании эти пары придут в обратном порядке. Например, при отпускании
левой Ctrl - 9Dh, правой - E0h 9Dh, Home -E0h C7h E0h AAh. Для клавиши Pause сканкод при отпускании вообще не вырабатывается.
in al,60h.
Действительно отпускание клавиши там отсвечвается! Спасибо.
Но при этом когда нажата буква, например "а", то в регистре al постоянное значение 30.
А когда я нажимаю клавишу вверх значение непостоянное(72,170,224)! Почему, и что это значит!?
in al,60h.
Действительно отпускание клавиши там отсвечвается! Спасибо.
Но при этом когда нажата буква, например "а", то в регистре al постоянное значение 30.
А когда я нажимаю клавишу вверх значение непостоянное(72,170,224)! Почему, и что это значит!?
P.S. Кстати при нажатии клавиш вниз, влево, вправо значение тоже меняется.
Клавиша "а" - на основной клавиатуре, и для нее вырабатывается сканкод из одного байта (как раз 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, но и ставятся в обратном порядке).