|
|||
Скачать Помещение символов в буфер клавиатуры
19.09.1994 А зачем для этого лезть в контроллер клавиатуры? Для того, чтобы сымитировать нажатие клавиш требуется всего лишь
запихать код в буфер клавиатуры. В AT-BIOS для этого существует
функция 5 прерывания 16H, описание которой найти не сложно.
Не намного сложнее напрямую работать с буфером клавиатуры. procedure StuffKey(W : Word); {-Stuff one key into the keyboard buffer} const KbdStart = $1E; KbdEnd = $3C; var KbdHead : Word absolute $40 : $1A; KbdTail : Word absolute $40 : $1C; SaveKbdTail : Word; begin SaveKbdTail := KbdTail; if KbdTail = KbdEnd then KbdTail := KbdStart else Inc(KbdTail, 2); if KbdTail = KbdHead then KbdTail := SaveKbdTail else MemW[$40:SaveKbdTail] := W; end; Что же касается считывания нескольких нажатых и неотпущенных клавиш, то придется перехватить INT9 и работать со скэнкодами напрямую Вот простая программка, поэкспериментировав с которой вы найдете ответ на ваш вопрос. Обратите внимание на то, что она выдает при нажатии клавиши и что при отпускании Program TestScancode; Uses Dos,CRT;{CRT здесь существеннен - не следует пользоваться функциями dos из обработчика клавиатурного прерывания} var OldKbdHandler:Pointer; Procedure Int9;interrupt; var Scancode:Byte; begin ScanCode:=Port[$60]; Write(ScanCode:4); asm Pushf Call DWORD PTR OldKbdHandler; end; end; begin GetIntVec($9,OldKbdHandler); SetIntVec($9,@Int9); Repeat Until Readkey=#27; SetIntVec($9,OldKbdHandler); end; | |||
© 2009–2024 Russian Pascal Developer Network.
Техническая площадка: ISBIZ Хостинг |