Flisker
05-03-2006, 05:39 PM
There are really two print screen functions: 1) print current screen
snapshot, triggered by PrintScreen or Shift- PrtSc or Shift-gray*, and
2) turn on continuous screen echo, started and stopped by Ctrl-P or
Ctrl-PrtSc.
1) Screen snapshot to printer:
The BIOS uses INT 5 for this. Fortunately, you don't need to mess with
that interrupt handler. The standard handler, in BIOS versions dated
December 1982 or later, uses a byte at 0040:0100 (= 0000:0500) to
determine whether a print screen is currently in progress. If it is,
pressing PrintScreen again is ignored. So to disable the screen
snapshot, all you have to do is write a 1 to that byte. When the user
presses PrintScreen, the BIOS will think that a print screen is already
in progress and will ignore the user's keypress. You can re-enable
PrintScreen by zeroing the same byte.
Here's some simple code:
void prtsc_allow(int allow) /* 0=disable, nonzero=enable */
{
unsigned char far* flag = (unsigned char far*)0x00400100UL;
*flag = (unsigned char)!allow;
}
2) Continuous echo of screen to printer:
If ANSI.SYS is loaded, you can easily disable the continuous echo of
screen to printer (Ctrl-P or Ctrl- PrtSc). Just redefine the keys by
"printing" strings like these to the screen (BASIC print, C printf(),
Pascal Write statements, or ECHO command in batch files), where <27>
stands for the Escape character, ASCII 27:
<27>[0;114;"Ctrl-PrtSc disabled"p
<27>[16;"^P"p
If you haven't installed ANSI.SYS, I can't offer an easy way to disable
the echo-screen-to-printer function.
Actually, you might not need to disable Ctrl-P and Ctrl- PrtSc. If your
only concern is not locking up your machine, when you see the "Abort,
Retry, Ignore, Fail" prompt just press Ctrl-P again and then press I. As
an alternative, install one of the many print spoolers that intercept
printer-status queries and always return "Printer ready".
There we go :)
- Snoop
snapshot, triggered by PrintScreen or Shift- PrtSc or Shift-gray*, and
2) turn on continuous screen echo, started and stopped by Ctrl-P or
Ctrl-PrtSc.
1) Screen snapshot to printer:
The BIOS uses INT 5 for this. Fortunately, you don't need to mess with
that interrupt handler. The standard handler, in BIOS versions dated
December 1982 or later, uses a byte at 0040:0100 (= 0000:0500) to
determine whether a print screen is currently in progress. If it is,
pressing PrintScreen again is ignored. So to disable the screen
snapshot, all you have to do is write a 1 to that byte. When the user
presses PrintScreen, the BIOS will think that a print screen is already
in progress and will ignore the user's keypress. You can re-enable
PrintScreen by zeroing the same byte.
Here's some simple code:
void prtsc_allow(int allow) /* 0=disable, nonzero=enable */
{
unsigned char far* flag = (unsigned char far*)0x00400100UL;
*flag = (unsigned char)!allow;
}
2) Continuous echo of screen to printer:
If ANSI.SYS is loaded, you can easily disable the continuous echo of
screen to printer (Ctrl-P or Ctrl- PrtSc). Just redefine the keys by
"printing" strings like these to the screen (BASIC print, C printf(),
Pascal Write statements, or ECHO command in batch files), where <27>
stands for the Escape character, ASCII 27:
<27>[0;114;"Ctrl-PrtSc disabled"p
<27>[16;"^P"p
If you haven't installed ANSI.SYS, I can't offer an easy way to disable
the echo-screen-to-printer function.
Actually, you might not need to disable Ctrl-P and Ctrl- PrtSc. If your
only concern is not locking up your machine, when you see the "Abort,
Retry, Ignore, Fail" prompt just press Ctrl-P again and then press I. As
an alternative, install one of the many print spoolers that intercept
printer-status queries and always return "Printer ready".
There we go :)
- Snoop