[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]
{
>If anyone could tell me how to disable [Print Screen] from within a
>text-based program, I would appreciate it. Thanks, - Jeff Napier, Another
>Company -
For that you can trap int 5h(Print Screen interrupt) Here is a program I
wrote for someone on another network that will show you the basics of how
it can be done:
nstn1410@fox.nstn.ca
}
PROGRAM DisableInt05h; { Dec 13/93, Greg Estabrooks. }
USES CRT, { IMPORT Clrscr,KeyPressed. }
DOS; { IMPORT SetIntVec,GetIntVec. }
VAR
OldInt05 :POINTER; { Holds the old address of INT 05h. }
NumPressed :WORD; { The number of times PrtScr was pressed.}
Misc :WORD;
{$F+} { Force FAR calls. }
PROCEDURE NewInt05; ASSEMBLER;
ASM
Push DS { Push DS onto stack. }
Mov AX,Seg @Data { Now point DS to our data segment. }
Mov DS,AX
Add NumPressed,1 { Add one to counter. }
Pop DS { Pop DS off stack. }
IRet { Force a return and pop flags off stack.}
END;{NewInt05}
{$F-} { Back to normal. }
BEGIN
NumPressed := 0; { Clear number count. }
Clrscr; { Clear the screen. }
GetIntVec($05,OldInt05); { Save Old Interrupt vector. }
SetIntVec($05,@NewInt05); { Point to our trap. }
Misc := 0; { Clear Counter. }
REPEAT { Loop Until a key other than PrtScr is }
{ pressed. }
GOTOXY(1,1); { Always show info at top corner. }
Write(Misc:8,'... You have pressed PrtScr ',NumPressed:3,' times.');
INC(Misc); { Increase counter to show a change. }
UNTIL KeyPressed;
SetIntVec($05,OldInt05); { Restore Old Interrupt vector. }
END.{DisableInt05h}
[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]