How to Trap PRINT SCREEN Key on an Extended (101-Key) Keyboard

Retired KB Content Disclaimer

This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.


You can detect (trap) the PRINT SCREEN (or SHIFT+PRINT SCREEN, or PRT SCR, and so on) key using the ON KEY GOSUB statement. This technique does not work under Microsoft Windows, and may not work reliably on all computers (it depends upon the type of ROM BIOS).

Although Basic can detect the key press with the ON KEY GOSUB statement, the PRINT SCREEN action is controlled through the ROM BIOS interrupt table, and cannot be disabled directly with Basic. To disable the print screen utility, the interrupt vector must be remapped with a C or assembly routine.

More Information

Here is the syntax of the KEY statement, where n=15-25 can be user-defined key combinations to trap:
   KEY n, CHR$(keyboardflag) + CHR$(scancode)
The following chart shows the keyboard flags and scan codes for PRINT SCREEN and SHIFT+PRINT SCREEN for standard and extended keyboards:

Standard Extended
-------- --------
Keyboard flag for:

No SHIFT &H00 &H80

Scan code for:

Note: The keyboard flags are affected by CAPS LOCK and NUM LOCK. The above values assume that CAPS LOCK and NUM LOCK are off. Add &H40 to the keyboard flag for CAPS LOCK, and add &H20 for NUM LOCK.

Code Example

The following code example detects each of the PRINT SCREEN and SHIFT+PRINT SCREEN combinations listed above:
'Note: This program detects PRINT SCREEN and SHIFT+PRINT SCREEN key
' combinations on standard and extended keyboards with CAPS LOCK
' and NUM LOCK off.
'Also note: This program does NOT disable the PRINT SCREEN action
' (that is, the screen is still printed). See the explanation
' in the text of the above article.
KEY 15, CHR$(&H00) + CHR$(&H37) 'Standard no SHIFTs
KEY 16, CHR$(&H02) + CHR$(&H37) 'Standard LEFT SHIFT
KEY 17, CHR$(&H01) + CHR$(&H37) 'Standard RIGHT SHIFT
KEY 18, CHR$(&H80) + CHR$(&H2A) 'Extended no SHIFTs
KEY 19, CHR$(&H82) + CHR$(&H2A) 'Extended LEFT SHIFT
KEY 20, CHR$(&H81) + CHR$(&H2A) 'Extended RIGHT SHIFT
FOR i%=15 TO 20
ON KEY(i%) GOSUB Handle:
KEY(i%) ON
WHILE INKEY$<>CHR$(27) : WEND 'Press ESC to end

Handle: PRINT "Trapped PRINT SCREEN keystroke"
PRINT "Screen will still print unless"
PRINT "Interrupt vector changed with"
PRINT "C or Assembly routine."

Article ID: 59133 - Last Review: Aug 16, 2005 - Revision: 1