PRODUCT : Borland C++ NUMBER : 1155 VERSION : 3.1 OS : DOS DATE : October 19, 1993 PAGE : 1/2 TITLE : Detecting unusual keystrokes and key combinations. Detecting unusual keystrokes and key combinations. ------------------------------------------------- Some keystrokes, such as CTRL-1, cannot be caught with bioskey() or an INT 15,4H interrupt handler because the BIOS does not pass the scan code along to INT 15. If you need to catch these keystrokes, you will need to intercept the keystroke directly at the INT 9 level. This example of code demonstrates exactly how to catch keystrokes such as CTRL-1. When the program is run, keystrokes will echo the screen as normal, but whenever a CTRL-1 is pressed, the machine will beep. #include #include #include /* 0x02 is the value for 1 */ #define KEY_TO_CATCH 0x02 /* Old INT 9 handler routine */ void interrupt ( *Old09Handler )(...); void interrupt New09Handler(...) { _AL = inportb( 0x60 ); // Read the Scan Code if ( _AL == KEY_TO_CATCH ) // Is it that key? { _AH = 0x02; // Check the Shift geninterrupt( 0x16 ); // Status using BIOS if ( _AX & 0x04 ) // Is Control Held Down? { _AL = inportb( 0x61 ); // Reset the Keyboard _AH = _AL; _AL |= 0x80; outportb( 0x61, _AL ); _AL = _AH; outportb( 0x61, _AL ); outportb( 0x20, 0x20 ); // EOI to 8259 PRODUCT : Borland C++ NUMBER : 1155 VERSION : 3.1 OS : DOS DATE : October 19, 1993 PAGE : 2/2 TITLE : Detecting unusual keystrokes and key combinations. _AX = 0x0E07; // Beep to indicate that geninterrupt( 0x10 ); // we caught the desired // key return; // Do not chain! } } Old09Handler(); // Chain to Old Handler } int main( void ) { Old09Handler = getvect( 0x09 ); // Save the original setvect( 0x09, New09Handler ); // Install new puts( "Please hit the ESC key to terminate..." ); LABEL: asm { mov ah, 8h int 21h or al, al jz LABEL mov dl, al mov ah, 2 int 21h cmp dl, 27 jne LABEL } setvect( 0x09, Old09Handler ); // Restore Original return( 0 ); } /* Keywords: bioskey, CTRL-3, CTRL-4, CTRL-5, CTRL-7, CTRL-8, CTRL-9, CTRL-0, keyboard, keypress */ DISCLAIMER: You have the right to use this technical information subject to the terms of the No-Nonsense License Statement that PRODUCT : Borland C++ NUMBER : 1155 VERSION : 3.1 OS : DOS DATE : October 19, 1993 PAGE : 3/3 TITLE : Detecting unusual keystrokes and key combinations. you received with the Borland product to which this information pertains.