так недавно я попытался сделать кейлоггер для моего школьного проекта. (Я изменил int9h на свой собственный код, чтобы я мог получить ключи без прерывания буфера клавиатуры или других программ). Теперь при использовании обычных клавиш (просто обычные коды BIOS) все работает, но у меня есть проблема с состоянием флага смены клавиатуры.
Я попытался получить байт, используя int16h (ах = 2) и прямо из памяти, и я попытался распечатать его, чтобы увидеть, что не так. Байт всегда равен 0 независимо от того, какую клавишу я нажимаю (Lshift, Rshift, Caps Lock и т. Д.).
Примечание: мы используем DOSbox для запуска наших программ
Это мой чек:
shiftRight_check:
mov ah, 2
int 16h
test al, 1
jz shiftLeft_check
jmp shift_keys
shiftLeft_check:
mov ah, 2
int 16h
test al, 2
jz regular_keys
jmp shift_keys
Из того, что я увидел, байт должен быть следующим:
0: 01H alpha-shift (right side) DOWN
1: 02H alpha-shift (left side) DOWN
2: 04H Ctrl-shift (either side) DOWN
3: 08H Alt-shift (either side) DOWN
4: 10H ScrollLock state
5: 20H NumLock state
6: 40H CapsLock state
7: 80H Insert state
Кто-нибудь может мне помочь?