Q59132: How to Disable Toggle for NUM/CAPS/SCROLL LOCK with Key Trap
Article: Q59132
Product(s): See article
Version(s): 4.00 4.00b 4.50
Operating System(s): MS-DOS
Keyword(s): ENDUSER | SR# S900222-212 B_BasicCom SCROLLLOCK NUMLOCK CAPSLOCK | mspl13_basic
Last Modified: 26-MAR-1990
By setting up key traps for the NUM LOCK, CAPS LOCK, and SCROLL LOCK
keys, a BASIC program can prevent the toggling of each of these key
states. This is extremely useful for trapping other keys because the
program can limit the number of keys to be defined.
This information applies to Microsoft QuickBASIC Versions 4.00, 4.00b,
and 4.50, to Microsoft BASIC Compiler Versions 6.00 and 6.00b for
MS-DOS and MS OS/2, and to Microsoft BASIC Professional Development
System (PDS) Version 7.00.
The syntax of the KEY statement (where n=15 through 25 can be
user-defined keys) is as follows:
KEY n, CHR$(keyboardflag) + CHR$(scancode)
The following are the scan codes are for the CAPS LOCK, NUM LOCK, and
SCROLL LOCK keys:
Key Scan Code
--- ---------
CAPS LOCK &H3A
NUM LOCK &H45
SCROLL LOCK &H46
By defining traps for NUM LOCK and CAPS LOCK, your program can
effectively reduce (by a factor of four) the number of keys needed to
be defined. For example, to trap both the CTRL+ALT+DEL and CTRL+BREAK
combinations, 16 keys must be created to handle all the different
combinations. This is more than the maximum number of user-defined
keys (11). By defining CAPS and NUM LOCK traps, only 4 additional keys
must be defined.
To see how to programmatically (without pressing the key) force the
NUM LOCK, CAPS LOCK, or SCROLL LOCK state on or off, query on the
following words to find a separate article in this Knowledge Base:
KEY and POKE and CAPS
Code Example
------------
The following code example disables the toggles for the CAPS LOCK,
NUM LOCK, and SCROLL LOCK keys:
'NOTE: This program assumes NUM LOCK and CAPS LOCK are off at the
' beginning. See the article referenced above for how to set
' the NUM and CAPS LOCK off.
KEY 15, CHR$(&H0) + CHR$(&H3A) 'CAPS LOCK
ON KEY(15) GOSUB caps
KEY(15) ON
KEY 16, CHR$(&H0) + CHR$(&H45) 'NUM LOCK
ON KEY(16) GOSUB num
KEY(16) ON
KEY 17, CHR$(&H0) + CHR$(&H46) 'SCROLL LOCK
ON KEY(17) GOSUB scroll
KEY(17) ON
WHILE INKEY$ <> CHR$(27): WEND
END
caps: PRINT "NO CAPS LOCK TOGGLE!"
RETURN
num: PRINT "NO NUM LOCK TOGGLE!"
RETURN
scroll: PRINT "NO SCROLL LOCK TOGGLE!"
RETURN
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.