AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Consolenausgaben LIVE abfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Consolenausgaben LIVE abfangen

Ein Thema von DelTurbo · begonnen am 20. Aug 2015 · letzter Beitrag vom 21. Aug 2015
Antwort Antwort
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.197 Beiträge
 
Delphi 2007 Architect
 
#1

Consolenausgaben LIVE abfangen

  Alt 20. Aug 2015, 13:06
Hi,
Ich versuche seit Stunden den Output eines Commandlineprogramms LIVE abzufragen.
ALLE Beispiele die ich gefunden habe, zeigen die Ausgabe erst an wenn das CommandlineProgramm beendet wird. Also Quasi fertig ist.

Was ich so gefunden habe im Netz ist so ziemlich alles auf dem Beispiel aufgebaut. Das Problem ist das er bei ReadFile sollange wartet bis das SlavePrg fertig ist.

http://delphi.wikia.com/wiki/Capture...altime_To_Memo oder http://stackoverflow.com/questions/2...009-with-vista

Hat jemand eine Idee wie man es "richtig" macht?

Vielen dank im Voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.103 Beiträge
 
Delphi 12 Athens
 
#2

AW: Consolenausgaben LIVE abfangen

  Alt 20. Aug 2015, 13:38
Hi,
Ich versuche seit Stunden den Output eines Commandlineprogramms LIVE abzufragen.
Guckst du hier: Getting output from a shell/dos app into a Delphi app (2. Beispiel in meiner Antwort)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.197 Beiträge
 
Delphi 2007 Architect
 
#3

AW: Consolenausgaben LIVE abfangen

  Alt 20. Aug 2015, 13:52
Hi,
erstmal danke für die Antwort. Allerdings habe ich das auch schon probiert. Ich habe viele Probiert. Ich wollte nur nicht alle URLs hier Posten.
Das bleibt leider auch hier stehen und wartet bis das CmdLine Programm zu ende ist.


WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);

Kurz zu meinem System:
Windows 7 x64 (Ich hoffe doch es hat nix mit dem 64bit System zu tun.)
Delphi 2007

EDIT: Ich habe es gerade auf 32Bit versucht. Klappt auch nicht.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!

Geändert von DelTurbo (20. Aug 2015 um 13:56 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.197 Beiträge
 
Delphi 2007 Architect
 
#4

AW: Consolenausgaben LIVE abfangen

  Alt 20. Aug 2015, 14:11
Was ich auch gesehen habe ist folgender Code. Das ist damit das Programm nicht hängen bleibt, und in der CaptureBar nicht steht "Keine Rückmeldung". Ich denke mal alleine das ist doch ein hinweis darauf das ReadFile an der stelle einfach wartet.

Delphi-Quellcode:
    if CreateProcess(nil,
           PChar(DosApp),
           @Security,
           @Security,
           true,
           NORMAL_PRIORITY_CLASS,
           nil,
           nil,
           start,
           ProcessInfo)
    then
    begin
     repeat
      Apprunning := WaitForSingleObject
                   (ProcessInfo.hProcess,100) ;
      Application.ProcessMessages;
     until (Apprunning <> WAIT_TIMEOUT) ;
      Repeat
        BytesRead := 0;
        ReadFile(ReadPipe,Buffer[0], ReadBuffer,BytesRead,nil) ;
        Buffer[BytesRead]:= #0;
        OemToAnsi(Buffer,Buffer) ;
        AMemo.Text := AMemo.text + String(Buffer) ;
      until (BytesRead < ReadBuffer) ;
   end;
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

AW: Consolenausgaben LIVE abfangen

  Alt 20. Aug 2015, 14:29
Bist du dir sicher, dass das aufgerufene Programm nicht einfach alles puffert und am Ende komplett ausgibt.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.197 Beiträge
 
Delphi 2007 Architect
 
#6

AW: Consolenausgaben LIVE abfangen

  Alt 20. Aug 2015, 14:38
Ja, 100%. Ich habe ein extra zum Testen ein kleines Consolen Programm gemacht.

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i :Integer;
begin
  try
  { TODO -oEntwickler -cKonsole Main : Hier Code einfügen }
    for i:=0 to 20 do begin
      Writeln(i);
      Sleep(1000);
    end;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.
EDIT: Ich habe sogar das versucht, bis ich gemerkt habe das es für Lazarus ist
http://www.delphipraxis.net/1030919-post5.html
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!

Geändert von DelTurbo (20. Aug 2015 um 14:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz