|
Это не лучший способ
написания TSR, корректность работы которого зависит от порядка
загрузки.
Управление состоянием клавиатуры
Альтернативой для проверки буфера клавиатуры является наблю-
дение за байтом состояния клавиатуры. Этот метод исключает необ-
ходимость знать местонахождение ROM-BIOS буфера клавиатуры, но
требует, чтобы пользователь выбрал комбинацию клавиш, которая при
ее нажатии изменяет состояние клавиатуры (т. |
файловый менеджер |
|
|
|
Этот метод будет работать до тех пор, пока любая загружен-
ная после нее TSR не изменит байт состояния клавиатуры. Так как
состояние клавиатуры влияет на обработку сканируемого кода, этот
способ будет работать, пока TSR не будет изменена.
Листинг 4-7 представляет замену для ISR ROM-BIOS клавиатуры.
Некоторые вещи, которые делает эта программа, могут прямо сейчас
показаться слегка неверными, потому что процесс распознавания го-
рячего ключа возлагается на сервисную подпрограмму обработки пре-
рываний. |
avast 4.7 |
|
|
архиватор win rar, asplinux deluxe, архиватор winzip, panda, бухгалтерия, .
архиватор rar
|
Но так как действия
пользователя непредсказуемы, этот метод не является надежным пу-
тем для распознавания горячего ключа. Еще раз заметим, что этот
пример не обеспечивает окончательно безопасность завершения TSR.
Ловушка для Int 9
Другим обращением к управлению клавиатурой является Int 9.
При нажатии или освобождении клавиши аппаратные средства генери-
руют прерывание Int 9. Новая ISR Int 9 вызывает ISR ROM клавиату-
ры и использует Int 16h для просмотра первого символа буфера кла-
виатуры. Недостатком этого обращения является то, что непустой
буфер клавиатуры скрывает горячий ключ. Если Вы можете обеспе-
чить, что ни одна TSR не будет впоследствии загружена в буфер, Вы
можете использовать этот метод, сканируя буфер целиком при каждом
нажатии клавиши.
TSR, которые расширяют буфер клавиатуры, используются до-
вольно широко. Они замещают ISR int 9 и int 16h. Их код int 9 вы-
зывает старую ISR int 9 для обслуживания прерывания от клавиатуры
и затем вызывает старую ISR int 16h для просмотра буфера клавиа-
туры. Новая ISR int 9 запоминает эти символы в своем собственном
буфере. Замещенная ISR int 16h удаляет символы из этого нового
буфера.
TSR, которые переопределяют или привязывают к клавишам мак-
роопределения, также используют этот метод. Если Ваша TSR загру-
жает перед собой другую TSR, которая пересылает буфер клавиатуры,
Ваша TSR всегда будет находить буфер пустым.
|
|
|