Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi - Konsolencommand ausführen und ergebnis abfangen (https://www.delphipraxis.net/138509-delphi-konsolencommand-ausfuehren-und-ergebnis-abfangen.html)

peter001 11. Aug 2009 18:09


Delphi - Konsolencommand ausführen und ergebnis abfangen
 
Hallo!

Ich habe schon viel gesucht und einiges gefunden.
Und zwar möchte ich, dass ich mit meinem Delphiprogramm eine Anwendung starte und deren Output auslese, damit ich diesen in meiner Anwendung als String verarbeiten kann.
Man kann sich das so vorstellen, dass ich ein GUI für eine console-only-application bauen möchte.

Fündig bin ich bereits hier geworden: http://www.delphipraxis.net/internal...ct.php?t=58475
Ich kann auf Knopfdruck Daten an die Konsole senden.

Nur leider habe ich es nicht hinbekommen, dass dieses command auch ausgeführt wird. Die Konsole zeigt mir genau das, was ich ihr sende, passieren tut aber nichts.

Gibt es eine Möglichkeit, das ohne größere aufwände (extra frameworks, addons, etc) hinzukriegen?

Mein bisheriger Codeschnipsel:

Delphi-Quellcode:
procedure TForm1.compileClick(Sender: TObject);
var
  hIn: THandle;
  hOut: THandle;
  c: char;
  iRead, iWritten: cardinal;
  s: string;
begin
  opusage.Caption := 'Das Fenster wird nun für die Konsolenausgabe benutzt';
  clearlog.Enabled := true;
  resetqcfile.Enabled := false;
  toclipboard.Enabled := true;

  AllocConsole;

  hIn := GetStdHandle(STD_INPUT_HANDLE);
  hOut := GetStdHandle(STD_OUTPUT_HANDLE);

  FlushFileBuffers(hIn);

  s := 'H:\Programme\ConTEXT\ConTEXT.exe';
  WriteFile(hOut, s[1], Length(s), iWritten, nil);

  repeat
    ReadFile(hIn, c, 1, iRead, nil);
    if c = #13
      then Break
      else s := s + c;
  until false;


  FreeConsole;
end;
Ich bin wie immer Dankbar für jede Hilfe :drunken:

tomsson74 12. Aug 2009 15:46

Re: Delphi - Konsolencommand ausführen und ergebnis abfangen
 
Bist Du sicher, dass ConTEXT.exe überhaupt eine Konsolenausgabe produziert ? Ist das nicht ein Editor der durch deine Funktion erstmal gestartet wird ?

Ansonsten empfehle ich Dir diesen Thread:

http://www.delphipraxis.net/topic140910

Grüße
Thomas

himitsu 12. Aug 2009 15:52

Re: Delphi - Konsolencommand ausführen und ergebnis abfangen
 
der genannte Link trifft schon die Lösung.


nun aber nochmal zum Problem ... durch WriteFile schreibst du zwar in die Ausgabe "deines Programmes", aber das ist eben nur eine Ausgabe und dort steckt kein Befehlsinterpreter dahinter.
Wenn du ein anderes Programm ausführen willst, dann mußt du es schon per ShellExecuteEx oder CreateProcess ausführen und könntest dort dann dessen Ausgabe umleiten.

peter001 12. Aug 2009 16:02

Re: Delphi - Konsolencommand ausführen und ergebnis abfangen
 
Zitat:

Zitat von tomsson74
Bist Du sicher, dass ConTEXT.exe überhaupt eine Konsolenausgabe produziert ? Ist das nicht ein Editor der durch deine Funktion erstmal gestartet wird ?

Da sachste wat.
Aber eigentlich wollte ich erstmal erreichen, dass überhaupt etwas passiert wird und das command das ich übergebe ausgeführt wird, was ja scheinbar nicht der fall war.

Zitat:

Zitat von tomsson74
Ansonsten empfehle ich Dir diesen Thread:

Genau das was ich gesucht habe. Funktioniert alles super :mrgreen:

Danke! :love:

peter001 6. Sep 2009 21:46

Re: Delphi - Konsolencommand ausführen und ergebnis abfangen
 
uh, eben gerade ein problem festgestellt...


wenn die anwendung, die man per konsole aufrufen will, nun mit einem "Press any key to close window..." endet, und auf eine eingabe wartet, hängt sich die ganze anwendung mit auf und es passiert nichts mehr...

kann ich dem vorbeugen? oder ein command noch mitschicken nachdem ich den kompletten output empfangen habe?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz