PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : STRG - Taste deaktivieren


HackThaPlanet
19.05.2005, 20:39
Hallo!

Eigentlich programmiere ich grade etwas für ein "richtiges" MS-DOS (in C), da man jedoch unter MS-DOS jede Anwendung mit STRG+C abbrechen kann würde ich gerne die STRG Taste deaktivieren.
Dieses scheint mir unter C nicht möglich zu sein, jetzt habe ich leider überhaupt keine Ahnung von ASM - über google ne Menge Seiten gefunden die beschreiben dass man durch verbiegen der Interrupts (vermutlich 16h) Tastatureingaben verändern oder umlenken kann.
Die Routine bräuchte ich ziemlich schnell und eine Einarbeitung in Assembler wird mir so kurzfristig wohl nicht möglich sein :p
Kann mir da jemand weiter helfen mit Codebeispielen oder ähnlichem?? Will ja eigneltich nur ne .COM oder .EXE File die mir die STRG-Taste deaktiviert...

THX


Xpyder
20.05.2005, 10:15
Wenn sich kein anderer findet, kann ich ja helfen...

Wieso so'ne komische Ansage? - Naja. Ich kenn mich aus mit
DOS und BIOS. Und auch mit Assembler.

Wenn ich allerdings "Hochsprache" code, ist das bei mir
(im Gegensatz zu Dir) halt leider Pascal - will sagen:
Keine Ahnung, wie man in C Assembler- und Interrupt-
Routinen in den Source integriert. Daher würd ich mal
schätzen, wäre ein "richtiger C-Coder" hier wohl besser,
um das zu beantworten. Sollte sich keiner finden, kann ich
Dir aber fix was in asm coden, das Du das einbauen mußt.
Btw: Es ist auch (mit derselben Vorgehensweise) möglich,
CTRL-ALT-DEL (also den berühmten "Reset-Affengriff") zu
sperren...

butterkeks
20.05.2005, 12:21
AFAIK kannste die standart-c "signal" Funktion für diesen Zweck benutzen (zumindest DJGPP müsste damit umgehen können, soweit ich weiß; Aber ich spreche hier nicht aus Erfahrung).

Das würde in etwa so aussehen:

#include <signal.h>

/* ... */

signal(SIGINT, SIG_IGN);

u.U. musst du dos.h, dpmi.h und io.h mit einbinden

falls es dich interessiert: ich hab das im lynx source code nachgeschaut, also wenn du wirklich keinen Kontakt mit Assembelr haben willst, kannst du es dir ja mal selbst ansehen.

Wie auch immer, fortan sollte STRG+C ignioriert werden (andere Kombinationen funktionieren jedoch immer noch... wenn du die auch deaktivieren willst, dann musst du wohl etwas aus XPyders Trickkiste nehmen)

COCYHOK
21.05.2005, 00:59
Wie geht das denn nun, Xpyder? Interessiert mich auch mal.

Felix Kaiser
21.05.2005, 09:11
INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
Desc: this interrupt is automatically called when INT 09 determines that
Control-Break has been pressed
Note: normally points to a short routine in DOS which sets the Ctrl-C flag,
thus invoking INT 23h the next time DOS checks for Ctrl-C.
SeeAlso: INT 23,MEM 0040h:0071h
MEM 0040h:0071h - Ctrl-Break FLAG
Size: BYTE
Desc: bit 7 is set when Ctrl-Break has been pressed
SeeAlso: INT 1B
INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
---DOS 1.x---
Return: AH = 00h abort program
if all registers preserved, restart DOS call
---DOS 2+---
CF clear
Return: all registers preserved
return via RETF with CF set or (MS-DOS 1,DR DOS) RETF 2 with CF set
DOS will abort program with errorlevel 0
else (RETF/RETF 2 with CF clear or IRET with CF ignored)
interrupted DOS call is restarted
Notes: this interrupt is invoked whenever DOS detects a ^C or ^Break; it
should never be called directly
MS-DOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
MS-DOS remembers the stack pointer before calling INT 23, and if it is
not the same on return, pops and discards the top word; this is what
permits a return with RETF as well as IRET or RETF 2
MS-DOS 2.1+ ignores the returned CF if SP is the same on return as it
was when DOS called INT 23, so RETF 2 will not terminate the program
Novell DOS 7 always pops a word if CF is set on return, so one should
not return with RETF 2 and CF set or IRET with the stored flags' CF
set
any DOS call may safely be made within the INT 23 handler, although
the handler must check for a recursive invocation if it does
call DOS
SeeAlso: INT 1B,INT 21/AH=92h"PTS-DOS"

HackThaPlanet
22.05.2005, 22:39
Habs auch hinbekommen aber vielen Dank für die Bemühungen... und sorry dass ich so spät zurückschreibe... versuche mich wenigstens am Wochenende von PC's fern zu halten :D
Kann morgen gerne mal den ASM Code posten falls es hier im Forum keine beschwerden gegen einen 100-Zeiler gibt :rolleyes: Funktionier übrigens super... STRG+Alt+Entf, CTRL+C sind alle deaktiviert!

Die C-Routine "signal(SIGINT, SIG_IGN);" hatte ich mit dem VS getestet aber unter Windows sowie DOS keinen Erfolg gehabt... hab irgendwo gelesen dass MS das nicht mehr unterstützt und einfach unterbindet - was allerdings wohl kaum auf mein DOS 4.1 System zutreffen dürfte! Keine Ahnung warums nicht lief, der Compiler hat keine Fehler gemeldet - was ja nun nicht immer was zu bedeuten hat.

Den ASM Code gibts morgen, liegt auf nem anderen Rechner... n8

HackThaPlanet
23.05.2005, 09:08
So, hier der ASM Code zum deaktivieren von STRG+ALT+ENTF, STRG+ALT+C...