Aplikacja konsolowa

0

Ma może ktoś pomysł jak zróbić wiersz poleceń w konsoli 32 bitowej w Delphi??
Chodzi mi o zrobienie takiego czegoś jak command.com tylko, że w Delphi żeby działało tylko pod Windows'a.

Jak ktoś ma źródełka w delphi albo C++ to pardzo proszę.

0

w dziale download znajduje sie moj komponencik symulujacy konsole (CmdEdit)
moze ci sie przyda :)

0

Niestety nie przyda się wcale :(
Muszę to zrobić w aplikacji konsolowej (okienku konsolowym), a nie na formularzu z komponentami :(

0

to może skorzystaj z funkcji System() z FAQ

i daj taki kod:

var
  S: string;
begin
  repeat
    ReadLn(S);
    WriteLn(System(S));
  until False;
end;
0

Oj jednak to też mi się nie przyda, bo uruchamiane aplikacje dosowe mają być uruchamiane w mojej konsoli i te programy mają opcje tak jak np. quizy gry itp. a nie tylko wywołanie z parametrem.
Po prostu chcę zrobić identyczny command.com tylko że w delphi. (jako aplikacja konsolowa)

0

To może funkcje System() wymień na coś takiego:

function ConExec(Cmd: string): Boolean;
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  Buf: array[0..8191] of Char;
begin
  Result := False;
  Cmd := '%ComSpec% /c ' + Cmd;
  ExpandEnvironmentStrings(@Cmd[1], Buf, SizeOf(Buf));
  FillChar(SI, SizeOf(SI), 0);
  SI.cb := SizeOf(SI);
  SI.dwFlags := STARTF_USESHOWWINDOW;
  SI.wShowWindow := SW_HIDE;
  if CreateProcess(nil, Buf, nil, nil, True, 0, nil, nil, SI, PI) then
  begin
    WaitForSingleObject(PI.hProcess, INFINITE);
    CloseHandle(PI.hThread);
    CloseHandle(PI.hProcess);
    Result := True;
  end;
end;

To będzie uruchamiać w konsoli...

0

Dzięki za rady, ale tu chodzi o coś więcej niż wyświetlanie danej aplikacji dosowej, ale także reagowanie na klawisze dla niej. Także obsługa komendy cd dir itp. muszą działać.

Chyba nie znajdę odpowiedzi :( bo zadałem takie pytanie na kilku angielskich i niemieckich forach w tym na torry.

0

Nie rozumiem w czym problem?!

Taki program jest stosunkowo prosty do napisania, chociaż na pewno czasochłonny.

Aplikacja konsolowa (File->New->Other->Console Application).
Wykorzystujesz Write, Writeln, Read, Readln itp.
Np:

Write('Wpisz polecenie>'); Readln(s);
s := Trim(s);
if (UpperCase(Copy(s, 1, 2)) = 'CD') and (Copy(s, 3, 1) = ' ') then
begin
  sDir := Copy(s, 4, Length(s));
  sDir := ExpandFileName(sDir);
  // należałoby jeszcze sprawdzić, czy sDir = '..' lub sDir = '.' itd., itp. ......
  if not DirectoryExists(sDir) then JakaśProceduraTypu_ShowError
  else ChDir(sDir);
end;

Po prostu odczytujesz (najlepiej w pętli warunkowej, której zakończenie może nastąpić np. przez wpisanie przez użytkownika słowa EXIT) dane podane przez użytkownika, analizujesz łańcuch (rozdzielasz na polecenie i parametry), sprawdzasz, czy wszystkie dane są prawidłowe i wykonujesz odpowiednią operację lub wyświetlasz error.
Jeśli chcesz kilka dodatkowych "funkcji konsolowych" (np kolory) ściągnij moduł Crt (http://www.jack1024.private.pl/downloads/download.php?cat=delphi&f=Crt.pas).

1 użytkowników online, w tym zalogowanych: 0, gości: 1