| Autor |
Beitrag |
en!gma
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Di 23.08.05 21:01
wollt nur fragn ob es wohl möglich wäre soetwas zu realisieren.
also das ist es auf jedenfall, aber halt ob ich sag mal für nen durchschnitts delphianer möglich ist
alles komplett nachzubauen wäre unsinn, wollte halt zu lernzwecken mal schaun ob ich zumindest sowas hinkriegen könnte
wie zB das ausführen von exe dateien und halt das man durch ordner durschnüffeln kann mit cd und cd.. usw.
sinn der sache wäre für mich halt was zu lernen und das ganze villeicht ein bischen grafisch aufzubessern.
|
|
galagher
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 23.08.05 21:37
en!gma hat folgendes geschrieben: | | wollt nur fragn ob es wohl möglich wäre soetwas zu realisieren |
Ja, ist durchaus möglich - ich hab's nämlich schon gemacht - nennt sich WinDos. Ist aber ein gewaltiger Aufwand, ok, bei cmd vielleicht weniger (wenn man das mit command vergleichen kann  ), aber ich habe ndos.com (das nebenbei bemerkt eine .exe ist) von Norton nachprogrammiert, erweitet um einige neue Befehle, komlett mit einer Art Stapeldatei-Syntax, Aliasverarbeitung usw..
Vor allem die Fehlerbehandlung ist aufwändig, wenn du nicht a) ständig Standardfehlermeldungen sehen willst und b) mehr als bloss "Unbekannter Befehl" oder "Fehlerhafte Syntax" haben willst. Also musst du neben der eigentlichen Befehlsverarbeitung auch etliche Fehlermeldngs-Strings festlegen, die möglichst einheitich sein sollten.
Das Ganze läuft als normale Delphi-Anwendung in einem normalen Fenster.
Geht also schon, du musst "bloss" eine eigene Befehlssprache verwenden, also Befehle wie copy, move, md, dir usw. samt deren Parametern, darauf achten, was passiert, wenn der Benutzer Ungültiges eingibt usw.
Naja, funktioniert, leider ist es recht unübersichtlich geraten (Spaghetticode...)
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Di 23.08.05 21:43
könntest du wohl ein kleines beispiel geben?
also wie gesagt ich würd mich schon erstmal zufrieden geben wenn ich per cd usw durch die ordner hüpfen könnte.
wie macht man das dann am besten?
ne memo + nen edit?
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Di 23.08.05 21:54
Würdest du dir dann nich lieber gleich den vollkomennen Spass geben und eine Konsolenanwendung schreiben, statt eine Awendung mit Form? oO
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Amateur
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: Di 23.08.05 22:00
ja wäre logischer gleich ne konsolenanwendung zu machen auch wenn ich das noch nie geprogt hab..
und son codebeispiel fände ich auch interessant...
will ja dazulernen 
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Di 23.08.05 22:06
Kleine Konsolenanwendung:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, ShellApi; var x:STring; begin Write('C:\'); Readln(x); ShellExecute(0,'open',PChar(x),nil,nil,0); end. |
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Mi 24.08.05 13:13
hmm so konsolenanwendungen kenn ich wohl schon.
aber was mich besonders interessiert hat:
ich fang ja bei "c:\" an wenn ich dann "cd programme" eintippe bin ich in
"c:\programme"
bei "dir" zeigt er mir dann ja alle programme darin an.
wie funktioniert das?
also ich muss ja eigentlich schauen in welchem ordner ich gerade bin und ob der existiert wo ich hineinmöchte.
achja und ich wollte eigentlich keine konsolenanwendung, damit es ein wenig schöner aussehen sollte.
also wenn ich da zumindest farbe/schriftart ändern könnte, dann würd mir das auch schon reichen
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 24.08.05 14:24
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94:
| program BasicCmd;
{$APPTYPE CONSOLE}
uses windows, SysUtils, ShellApi;
type Tcommand = record exe : string; parms : string; end;
var x:STring; cmd: Tcommand;
function error:string; begin result := SysErrorMessage(GetLastError()) end;
function input2cmd(aCmd:string):Tcommand; var p : integer; begin p := pos(' ',aCmd); if p = 0 then begin result.exe := aCmd; result.parms := ''; end else begin result.exe := ansilowercase(copy(aCmd,1,p-1)); result.parms := copy(aCmd,p+1,maxint); end; end;
function RunCommand(aDir, aCmd, parms: string): boolean; var start: TStartupInfo; procInfo: TProcessInformation; return: cardinal;
begin FillChar(start, SizeOf(start), #0); start.cb := SizeOf(start); start.hStdOutput := GetStdHandle(STD_OUTPUT_HANDLE); start.hStdInput := GetStdHandle(STD_INPUT_HANDLE); start.hStdError := GetStdHandle(STD_ERROR_HANDLE); start.dwFlags := StartF_UseStdHandles or StartF_UseShowWindow; start.wShowWindow := SW_NORMAL; if CreateProcess(nil, PChar(aCmd + ' ' + parms), nil, nil, True, 0, nil, PChar(aDir), start, procInfo) then begin SetPriorityClass(procInfo.hProcess, Idle_Priority_Class); WaitForSingleObject(procInfo.hProcess, Infinite); GetExitCodeProcess(procInfo.hProcess, return); Result := (return = 0); CloseHandle(procInfo.hThread); CloseHandle(procInfo.hProcess); end; end;
procedure showdirectory(parms:string); var sr: tsearchrec; mask:string; begin if parms = '' then mask := includetrailingbackslash(GetCurrentDir)+'*.*' else mask := includetrailingbackslash(GetCurrentDir)+parms; if findfirst(mask,faAnyfile,sr) = 0 then repeat writeln(sr.name); until findnext(sr) <> 0 else writeln('no file found'); end;
begin while true do begin Write(GetCurrentDir + '> '); Readln(x); cmd := input2cmd(x); if (length(cmd.exe) = 2) and (length(cmd.parms) = 0) then (if cmd.exe[2] = ':' then (if not SetCurrentDir(cmd.exe) then writeln(error))) else if cmd.exe = 'cd' then SetCurrentDir(cmd.parms) else if cmd.exe = 'dir' then showDirectory(cmd.parms) else if not runcommand(GetCurrentDir,cmd.exe ,cmd.parms ) then if not runcommand('',cmd.exe ,cmd.parms ) then writeln(error); end; end. |
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
galagher
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 24.08.05 21:36
en!gma hat folgendes geschrieben: | | könntest du wohl ein kleines beispiel geben? |
Zuerst muss dein Programm feststellen, was eingegeben wurde. Das erste Wort ist immer der Befehl, bei cd wird sinnvollerweise ein weiteres Wort erwartet, das den Ordnernamen angibt, falls erforderlich, mit Laufwerksangabe. Du musst also feststellen, ob es ein zweites Wort gibt, und, wenn ja, ob es einen vorhandenen Ordner auf einem vorhandenen Laufwerk bezeichnet. Vergiss nicht, ein Laufwerk kann auch nicht bereit sein - Diskette oder USB-Stick!
Wenn also alles korrekt ist, führt dein Programm intern ein ChDir durch. Bei del musst du u.a. prüfen, ob die zu löschende Datei existiert.
Es ist jedenfalls schon eine Menge Code, der die Benutzereingabe und den Befehl auf Durchführbarkeit prüft, bis er endlich ausgeführt werden kann. Es ist besser, vorher zu prüfen, und gegebenenfalls eine eigene Fehlermeldung auszugeben, anstatt den Befehl einfach so durchzuführen.
Das Programm interpretiert die Eingabe also - cd an sich sind bloss zwei Buchstaben.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 24.08.05 23:56
und wenn das programm noch mehr können soll wie cd und dir, nämlich dass man mit konsolencommandos arbeiten kann ist es auch notwendig, dich um die ausgabe / eingabe der gestarteten programme zu kümmern.
wie ich das in dem source mit GetStdHandle mache.
wenn du das ganze mit fenstern machen will, muss die ausgabe ins memo, oder was auch immer du zum anzeigen verwendest, wandern.
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
|