'=========================================================================== ' Subject: DETECTING KEY STATUS Date: 11-17-95 (00:00) ' Author: Kerry S. Goodin Code: QB, PDS ' Origin: kerry.goodin@shivasys.com Packet: KEYBOARD.ABC '=========================================================================== '********************************************************** '* keyflags.bas by Kerry S. Goodin, D.D.S. * '* Placed in public domain 11-17-95 * '* use at your own risk * '********************************************************** DECLARE SUB keybFlags () DEFINT A-Z 'Quick Basic Code for detecting the status of alt, ctrl, left shift, 'right shift, and insert or the state of the flags of numlock, capslock, 'and scroll lock of ROM BIOS (ie. Flag set on or off) 'remember to start QB with the /lqb switch 'end program with esc key '$INCLUDE: 'qb.bi' 'declare the types of the flags TYPE Keyboard insert AS INTEGER CapsLock AS INTEGER NumLock AS INTEGER ScrollLock AS INTEGER alt AS INTEGER Ctrl AS INTEGER LeftShift AS INTEGER RightShift AS INTEGER END TYPE DIM SHARED inRegs AS RegType DIM SHARED outRegs AS RegType DIM SHARED kb AS Keyboard CLS PRINT "Demo of reading the keyboard flags" PRINT "press esc to end" DO COLOR 4, 7, 0 LOCATE 20, 5, 0: CALL keybFlags IF kb.alt THEN PRINT " alt "; ELSE PRINT " "; END IF IF kb.Ctrl THEN PRINT " Ctrl "; ELSE PRINT " "; END IF IF kb.LeftShift THEN PRINT " LeftShift "; ELSE PRINT " "; END IF IF kb.RightShift THEN PRINT " RightShift "; ELSE PRINT " "; END IF IF kb.insert THEN PRINT " Insert "; ELSE PRINT " "; END IF IF kb.CapsLock THEN PRINT " CapsLock "; ELSE PRINT " "; END IF IF kb.NumLock THEN PRINT " NumLock "; ELSE PRINT " "; END IF IF kb.ScrollLock THEN PRINT " ScrollLock "; ELSE PRINT " "; END IF IF INKEY$ = CHR$(27) THEN EXIT DO 'get out of loop LOOP END SUB keybFlags 'call the keyboard flags service 'Int 16H Function 02H inRegs.ax = &H200 CALL interrupt(&H16, inRegs, outRegs) 'extract the bits of the flag byte kb.insert = outRegs.ax \ 128 kb.CapsLock = (outRegs.ax AND &H40) \ 64 kb.NumLock = (outRegs.ax AND &H20) \ 32 kb.ScrollLock = (outRegs.ax AND &H10) \ 16 kb.alt = (outRegs.ax AND &H8) \ 8 kb.Ctrl = (outRegs.ax AND &H4) \ 4 kb.LeftShift = (outRegs.ax AND &H2) \ 2 kb.RightShift = (outRegs.ax AND 1) END SUB