Member
Статус: Не в сети Регистрация: 29.09.2004 Откуда: Курск
Возникла проблема... Пишу резидентный обработчик нажатия клавиш клавы для DOS на ассемблере, который обрабатывает ТОЛЬКО те клавиши, которые я укажу... Обработка происходит посредством переопределения 9-го прерывания на мою подпрограмму, которая получает скан-код из порта 60H и дальше, анализируя его, либо вызывает системный обработчик 9-го прерывания, либо через порт 61H повествует об успешном чтении скан-кода и завершает обработку.
Так вот… КАК сделать, чтобы клавиши цифрового блока справа распознавались как клавиши перемещения курсора? Ведь там последовательность сканов идет с префиксом E0H. Я в проге пишу, что если такой скан-код обнаружен, то вызывается системный обработчик 9-го прерывания. В итоге, при выключенном Num Lock при нажатии на клавишу 4, происходит то же, что и при нажатии на BackSpace. Другие клавиши цифрового блока вообще никак не реагируют.
По идее, если я все правильно понимаю, должно работать как в командной строке, т.е. при нажатии на 4 с выключенным Num Lock должно происходить простое перемещение курсора на позицию влево, а не удаление символа, и так далее…
Как быть?
Advanced member
Статус: Не в сети Регистрация: 10.04.2003 Откуда: Москва
Slava_rec, не понимаю проблемы.
Все кнопки имеют уникальный номер и при нажатии/отпускании идет прерывание.
Сам код из порта можно считывать сколько угодно раз, считывание не подразумевает сброс данных. Кстати .... не помню, чтение порта не изменяет статус прерывания? (очень давно делал)
Нажатие некоторых кнопок используется для изменения кодов вводимых символов. Это Shift/Alt...
Состояние этих кнопок хранится в регистре клавиатуры (несколько байт в сегменте 40h).
По "Shift/Alt..." надо менять таблицу преобразования символов.
Думаю, все это ты прекрасно знаешь.
Если надо работать фильтром, а не подменять драйвер клавиатуры - это легко.
Вот и не понимаю проблемы.
Member
Статус: Не в сети Регистрация: 29.09.2004 Откуда: Курск
serj Так проблема в том, что обработка клавиш цифрового блока с выключенным Num Lock происходит как-то сртранно... Вместо пермещения курсора при нажатии соотв. клавиш НИЧЕГО не происходит за искл. клавиши 4, кот. работает как Backspace. Посмотрел скан-коды этих клавиш, там префикс E0H... Так я и в обработчике написал, что если этот префикс встречается, то вызывается сист. обработчик, и все равно ничего не получается.
Slava_rec Кстати а как у тебя работют стрелки (не на цифровой) ? Весьма странная проблема - во всех резидентных программах, перехватывающих 9 прерывание, стрелки влево и вправо (на цифровой и обычной) работают как backspace и del.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения