07.02.2006, 09:29
общий
это ответ
Здравствуйте, Семенов Алексей Николаевич!
Клавиатура передаёт коды нажатия и отжатия клавиш. Поэтому в качестве клавиш Alt, Shift или Ctrl может выступать ЛЮБАЯ клавиша. А делать это так - ждём нажатия клавиши, после этого устанавливаем флажок. После этого ждём нажатия нужной нам клавиши и если флажок установлен, то значит, нажато две клавиши. И т.п.
При отжатии этот флажок сбрасывается.
Таким приёмом можно отслеживать нажатие сразу нескольких клавиш - делаешь массив в 128 (256) байт и там хранишь состояние всех клавиш.
Например, смотри исходник моего эмулятора Zx-Spectrum.
http://eugene-ivanov.narod.ru/research_zxs.htm
А именно:
;------------------------
; Обработчик 9 прерывания
proc Int9Entry
push eax ds DataWork
sub eax,eax
pop ds
Assume DS:DataWork
in al,96
mov [LastKey+dat],al
jmp wptr [cs:eax*2+tKeysJump]
ExitInt9:
in al,97
mov ah,al
or al,128
out 97,al
mov al,ah
jmp $+2
out 97,al
mov al,32
pop ds
out 32,al
pop eax
iret
endp