2009-12-27 19 views
8

Wie macht man eine Shell?
-Das kann Konsolenanwendungen wie FAR Manager mit den Farben und allen ...
Umleiten der Konsolenausgabe scheint nicht genug zu sein.
- PowerShell scheint es zu tun, ohne cmd.exe zu verwenden.Wie man eine Shell macht?

Das Endspiel würde eine grafische Shell erstellen (ohne die Standardkonsole).
Also, was ich sammelte ich brauchen würde, um die Konsole IO aber abfangen, die Anrufe an die Win32API über Konsole (wie WriteConsoleOutput, SetConsoleCursorPosition, ...)

+0

Gute Frage CiNN, welche Version (en) von Windows bauen Sie wahrscheinlich diese Shell auf? – Russell

+0

XP und Seven, je nachdem, wie sie sich verhalten :) – CiNN

Antwort

3

In seiner einfachsten Form nicht nur abrufen, ist ein Shell einfach Ein Programm, das eine Befehlszeile liest und dann den Befehl ausführt, den der Benutzer mit einer der Funktionen der exec() -Familie eingegeben hat. Wenn Sie die I/O-Umleitung unterstützen möchten, müssen Sie ein wenig mehr Arbeit beim Parsen des Befehls erledigen, aber es ist nicht unmöglich schwierig - das Schreiben einer einfachen Shell wird oft als Programmierungsübung für Anfänger festgelegt.

+0

Ich möchte eine grafische Shell erstellen, ohne die Konsole zu verwenden. – CiNN

1

Ich bin mir nicht sicher, aber was Sie denken, sind die Win32-Konsolen-APIs. Das müssen Sie aufrufen, um mit dem Zeichenmodus-Konsolenfenster im Detail zu interagieren.

Wenn Sie möchten, dass etwas Shell-ähnliches nicht in der Tat ein Konsolenfenster ist, dann müssen Sie über Win32-Pipes und die CreateProcess-API lernen. Sie verwenden die Pipes zum Erfassen der Ausgabe und zum Eingeben der Eingabe.

Wenn Sie GUI-Anwendungen mischen möchten, dann haben Sie einen gigantischen Job vor sich, wenn Sie wirklich wollen, dass ihre Fenster im Fensterbaum Ihrer App erscheinen.

+0

Ich weiß, ich denke, ich muss diese abfangen, damit ich sie in meiner Schale wieder umsetzen kann. – CiNN

0

Die meisten DOS-Anwendungen mit einer grafischen Benutzeroberfläche funktionieren nicht, wenn Sie die Ausgabe und Eingabe einfach abfangen (umleiten). Diese Programme, die direkt auf die Videohardware schreiben oder DOS-Interrupts verwenden, müssen in einem Konsolenfenster ausgeführt werden, wenn Sie Windows verwenden. Die Windows-Konsole emuliert ausreichend die DOS-Umgebung, so dass diese Arten von Programmen ordnungsgemäß funktionieren.

Wie Neil Butterworth erwähnt, sollten Sie eine der Exec-Funktionen verwenden, um Programme zu starten. Für DOS-Programme ist nichts besonderes erforderlich: Das Betriebssystem erkennt das Programm, wenn es sich um ein Windows-Programm oder ein Konsolenprogramm handelt.

+0

Ich denke, dass DOS Vollbild seit Windows Vista gelöscht wurde. – CiNN

+0

Ich bezog mich auf die Konsole, nicht auf den Vollbildmodus. – jdigital

0

Ein vollständiges, aber komplexes Beispiel für eine interaktive Shell ist in Microsofts F# distribution verfügbar. Der Code für die F # Interactive-Shell (FSI) befindet sich im Ordner C: \ Programme \ FSharp-1.9.7.8 \ source \ fsharp \ Fsi. Ein anderes Beispiel in C ist als Teil der TCL distribution verfügbar. Der Code, der die TCL-Befehlsshell implementiert, befindet sich im Ordner \ win.