Re: [DOS] Ausgabe abfangen
Ich hab sowas auch noch nie gemacht, aber müsste da nicht ein EOF am Dateiende kommen?
|
Re: [DOS] Ausgabe abfangen
Ich habe mal im Internet diese Funktion gefunden :
Delphi-Quellcode:
Damit kann ich den Output eines Konsolenfensters auslesen.
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; |
Re: [DOS] Ausgabe abfangen
Zitat:
ReadLn liest die Zeile und setzt den Zeiger auf die nächste Zeile, während Read nur die Zeile einliest. |
Re: [DOS] Ausgabe abfangen
Hi
Delphi-Quellcode:
Grüße vom marabu
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. |
Re: [DOS] Ausgabe abfangen
Zitat:
|
Re: [DOS] Ausgabe abfangen
So simpel? Wer hätte das gedacht :lol:
|
Re: [DOS] Ausgabe abfangen
Zitat:
vielen Dank an alle die mir geholfen haben! :) [closed] |
Re: [DOS] Ausgabe abfangen
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:
Gruß Gammatester
var
sOutput: string; begin while not eof(input) do begin readln(sOutPut); Writeln(sOutPut); end; end. |
Re: [DOS] Ausgabe abfangen
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 :( |
Re: [DOS] Ausgabe abfangen
Wiseo geht das hier nicht ?
Delphi-Quellcode:
Oder muss es komplizierter sein ? :shock:
var s : TStringList;
begin s.LoadFromFile ('C:\boot.ini'); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 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