[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]
{Here is my solution to the problem of trapping Ctrl-Alt-Del. As extra suger,
I'm providing hooks to make this Program TSR. Happy hacking!
<<File: trapboot.pas>>
{$m 1024,0,0} { Necesarry if you want to make the Program resident. }
{****************************************************************************}
{* NoBoot *}
{* *}
{* This Program stops rebooting While it is running by trapping *}
{* Ctrl-Alt-Del. *}
{* *}
{----------------------------------------------------------------------------}
Uses
Dos, Crt;
Var
OldKBVec : Pointer;
{ Declare all Variables in our interrupt routine global so that no stack }
{ allocation of Variables will be done during the interrupt. }
Var
Regs : Registers;
temp : Byte;
KBflag1: Byte Absolute $40:$17;
Procedure MyKB; inTERRUPT;
Const
EOI = $20;
KB_DATA = $60;
KB_CTL = $61;
inT_CTL = $20;
DEL_sc = $53; { Scancode of the del key }
begin
{ Check if Alt and Ctrl are pressed }
if ((KBFlag1 and 4)=4) and ((KBFlag1 and 8)=8) and
(Port[KB_DATA]= DEL_sc) then begin { get scancode of pressed key }
{ The following four lines signals that the key is read and that the }
{ hardware interrupt is over. }
temp:=Port[Kb_CTL];
Port[KB_CTL]:= temp or $80;
Port[KB_CTL]:= temp;
Port[inT_CTL]:= EOI;
{ Don't do ANYTHinG here that requires BIOS. This 'Writeln' is using the }
{ Crt Unit. }
Writeln('Ouch! That hurts!'); { Show we are here and alive! }
end
else begin
intr($69, Regs); { Call the old interrupt routine }
end;
end;
Var
Ch : Char;
begin
GetIntVec($9, OldKBVec);
SetIntVec($69, OldKBVec);
SetIntVec($9, @MyKB);
{ Keep(0); } { Uncomment and erase the rest of the lines to make this Program}
Repeat
Writeln('Press escape to Exit. or Ctrl-Alt-Del if you want...');
ch:= ReadKey;
Until ch=#27;
{ Forgetting the next line will very surely crash your Computer. }
SetIntVec($9, OldKbVec);
end.
[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]