724474

Shell-Wechsel per DOS-Kommando

Anforderung

Zeitaufwand

Bekanntlich definiert die Zeile "Shell=" im Abschnitt [Boot] der SYSTEM.INI die Kommandozentrale unter Windows. Standardmäßig dient der Programm-Manager PROGMAN.EXE als Shell, doch ist theoretisch auch jedes andere Windows-Programm als Shell erlaubt; einige Programme - nicht unbedingt CLOCK.EXE - sind auch durchaus tauglich für diesen Einsatz. Eine alternative Shell kann wünschenswert sein, um Speicher zu sparen, um den Handlungspielraum von Anfängern einzuschränken oder einfach, weil sie einem besser gefällt.Unsere beiden Shell-Listings SHELL.BAT und SHELL.BAS sollen den Wechsel zwischen verschiedenen Shells soweit möglich erleichtern. Das Qbasic-Programm liest den Inhalt der SYSTEM.INI ein, ändert dabei lediglich die Shell-Zeile und schreibt dann eine modifizierte SYSTEM.INI. Die gewünschte Shell wird der Batchdatei als Parameter übergeben:

shell winfile.exeDer Name wird der BAS-Datei dann als Variable "Winshell" der DOS-Umgebung übergeben. Bei Programmen, die weder im Pfad noch im Windows-Verzeichnis stehen, muß natürlich der volle Pfad angegeben sein. Sie können übrigens auch den Wortlaut der SYSTEM.INI-Zeile eingeben (etwa "shell=winfile.exe"), weil "=" für DOS ebenso als Begrenzer gilt wie das Leerzeichen.Steht eine häufiger genutzte Shell nicht im DOS-Pfad, lassen Sie sich die umständliche Pfadangabe am besten von Qbasic abnehmen: Die Zeilen 2 bis 4 zeigen an einem Beispiel, wie Sie etwa mit einer Eingabe "shell winword" ans Ziel kommen, obwohl dieses Programm nicht im Pfad steht. Ähnliche Zeilen könnten für weitere Shells folgen. Beim Aufruf "shell" ohne Parameter setzt SHELL.BAT übrigens automatisch die Standard-Shell PROGMAN.EXE ein.Das Listing setzt voraus, daß SHELL.BAT und QBASIC.EXE in einem beliebigen PATH-Verzeichnis stehen und SHELL.BAS in einem Verzeichnis "Batch".LISTING SHELL.BAT@echo offset winshell=%1if (%winshell%)==! set winshell=progman.exeqbasic/run c:\batch\shellset winshell=winLISTING SHELL.BASwinshell$ = ENVIRON$("WINSHELL")IF INSTR(LCASE$(ENVIRON$("WINSHELL")), "word") <> 0 THEN winshell$ = "c:\progs\winword.20b\winword.exe"IF INSTR(LCASE$(ENVIRON$("WINSHELL")), "6") <> 0 THEN winshell$ = "c:\progs\winword.v60\winword.exe"insert$ = "SHELL=" + winshell$OPEN "c:\windows\system.ini" FOR INPUT AS #1OPEN "c:\windows\system.tmp" FOR OUTPUT AS #2DOn = n + 1LINE INPUT #1, zeile$IF INSTR(UCASE$(zeile$), "SHELL=") > 0 THEN zeile$ = insert$PRINT #2, zeile$LOOP UNTIL (EOF(1))CLOSEKILL "c:\windows\system.ini"NAME "c:\windows\system.tmp" AS "c:\windows\system.ini"SYSTEM

PC-WELT Marktplatz

724474