AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[DOS] Ausgabe abfangen

Ein Thema von Andi1985 · begonnen am 14. Aug 2008 · letzter Beitrag vom 15. Aug 2008
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#11

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 11:49
Ich hab sowas auch noch nie gemacht, aber müsste da nicht ein EOF am Dateiende kommen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#12

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 11:51
Ich habe mal im Internet diese Funktion gefunden :
Delphi-Quellcode:
function GetConsoleOutput(const Command: String; var Output, Errors: TStringList): Boolean;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  SecurityAttr: TSecurityAttributes;
  PipeOutputRead: THandle;
  PipeOutputWrite: THandle;
  PipeErrorsRead: THandle;
  PipeErrorsWrite: THandle;
  Succeed: Boolean;
  Buffer: array [0..255] of Char;
  NumberOfBytesRead: DWORD;
  Stream: TMemoryStream;
begin
  //Initialisierung ProcessInfo
  FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);

  //Initialisierung SecurityAttr
  FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0);
  SecurityAttr.nLength := SizeOf(SecurityAttr);
  SecurityAttr.bInheritHandle := true;
  SecurityAttr.lpSecurityDescriptor := nil;

  //Pipes erzeugen
  CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0);
  CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0);

  //Initialisierung StartupInfo
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  StartupInfo.cb:=SizeOf(StartupInfo);
  StartupInfo.hStdInput := 0;
  StartupInfo.hStdOutput := PipeOutputWrite;
  StartupInfo.hStdError := PipeErrorsWrite;
  StartupInfo.wShowWindow := sw_Hide;
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;

  if CreateProcess(nil, PChar(command), nil, nil, true,
  CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil,
  StartupInfo, ProcessInfo) then begin
    result:=true;
    //Write-Pipes schließen
    CloseHandle(PipeOutputWrite);
    CloseHandle(PipeErrorsWrite);

    //Ausgabe Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while true do begin
        succeed := ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil);
        if not succeed then break;
        Stream.Write(Buffer, NumberOfBytesRead);
      end;
      Stream.Position := 0;
      Output.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeOutputRead);

    //Fehler Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while true do begin
        succeed := ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil);
        if not succeed then break;
        Stream.Write(Buffer, NumberOfBytesRead);
      end;
      Stream.Position := 0;
      Errors.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeErrorsRead);

    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    CloseHandle(ProcessInfo.hProcess);
  end
  else begin
    result:=false;
    CloseHandle(PipeOutputRead);
    CloseHandle(PipeOutputWrite);
    CloseHandle(PipeErrorsRead);
    CloseHandle(PipeErrorsWrite);
  end;
end;
Damit kann ich den Output eines Konsolenfensters auslesen.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#13

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 11:53
Zitat von Mogtar:
ah das hat geholfen, allerdigns bekomme ich imemr nur die erste zeile der boot.ini
wie setze ich den Lesezeiger weiter?

Delphi-Quellcode:
var
  sOutput: string;
begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }


  repeat
    read(sOutPut);
    Write(sOutPut);
  until sOutPut <> '';



end.
ReadLn statt Read.

ReadLn liest die Zeile und setzt den Zeiger auf die nächste Zeile, während Read nur die Zeile einliest.
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 11:54
Hi

Delphi-Quellcode:
var
  line: string;

begin
  AssignFile(input, ''); //stdin
  AssignFile(output, ''); //stdout
  Reset(input);
  Rewrite(output);
  while not Eof do
  begin
    ReadLn(line);
    WriteLn(line);
  end;
  CloseFile(output);
  CloseFile(input);
end.
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Andi1985
Andi1985

Registriert seit: 11. Mai 2007
Ort: NRW
116 Beiträge
 
Delphi 2006 Enterprise
 
#15

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 11:55
Zitat von Reinhardtinho:
Zitat von Mogtar:
ah das hat geholfen, allerdigns bekomme ich imemr nur die erste zeile der boot.ini
wie setze ich den Lesezeiger weiter?

Delphi-Quellcode:
var
  sOutput: string;
begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }


  repeat
    read(sOutPut);
    Write(sOutPut);
  until sOutPut <> '';



end.
ReadLn statt Read.

ReadLn liest die Zeile und setzt den Zeiger auf die nächste Zeile, während Read nur die Zeile einliest.
DAS geht genausowenig, ich erhalte nur die erste Zeile der Boot.ini..!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#16

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 11:56
So simpel? Wer hätte das gedacht
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Andi1985
Andi1985

Registriert seit: 11. Mai 2007
Ort: NRW
116 Beiträge
 
Delphi 2006 Enterprise
 
#17

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 11:56
Zitat von marabu:
Hi

Delphi-Quellcode:
var
  line: string;

begin
  AssignFile(input, ''); //stdin
  AssignFile(output, ''); //stdout
  Reset(input);
  Rewrite(output);
  while not Eof do
  begin
    ReadLn(line);
    WriteLn(line);
  end;
  CloseFile(output);
  CloseFile(input);
end.
Grüße vom marabu
Das funktioniert.
vielen Dank an alle die mir geholfen haben!

[closed]
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#18

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 13:03
Der Code aus den Beiträgen sollte natürlich angepasst werden. Wenn Du readln verwendest, sollte auch writeln verwendet werden. Un selbstverständlich hört man nicht auf wenn man irgendwas nichtleeres gelesen hat! (Also kein Wunder, daß Du nur die erste Zeile liest). Also ingesamt etwa so:
Delphi-Quellcode:
var
  sOutput: string;
begin
  while not eof(input) do begin
    readln(sOutPut);
    Writeln(sOutPut);
  end;
end.
Gruß Gammatester
  Mit Zitat antworten Zitat
Benutzerbild von Andi1985
Andi1985

Registriert seit: 11. Mai 2007
Ort: NRW
116 Beiträge
 
Delphi 2006 Enterprise
 
#19

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 13:07
mir ist aber noch etwas aufgefallen:
wenn ich nun meine exe normal aufrufe ohne Type C:\boot.ini | dann bleibt er bei EOF hängen
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#20

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 13:11
Wiseo geht das hier nicht ?

Delphi-Quellcode:
var s : TStringList;
begin
  s.LoadFromFile ('C:\boot.ini');
Oder muss es komplizierter sein ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 17:36 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