![]() |
Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist ?
Ich habe eine Delphi-Konsolenanwendung, die ein paar Texte per WriteLn ausgibt. Die Ausgabe kann ja per Dateiumleitung, also:
programm.exe > datei.txt in die angegebene Textdatei geschrieben werden. Wie kann ich nun im Programm herausfinden, ob so eine Umleitung aktiv ist ? Geht das wirklich nur per Abfrage der ParamStr-Wertes ? In diesem Fall wäre der Pfeil ein eigener Parameter und der Dateiname auch. Vielleicht gibt es eine andere Möglichkeit, die vor allem zuverlässiger funktioniert ? Danke für die Ideen. |
Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist
Ungetestet:
Du fragst das Handle mit GetStdHandle(STD_OUTPUT_HANDLE) ab und merkst dir das. Dann GetConsoleMode(handle, ...) aufrufen. Wenn die Funktion False liefert, war der Output wohl umgeleitet. |
Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist
Danke, dies ist auf jeden Fall der Schritt in die richtige Richtung.
Was ich jetzt noch brauche, ist der zweite Parameter in GetConsoleMode. Die Funktion liefert ja True zurück, falls sie korrekt ausgeführt werden konnte. So wie ich das ![]() Was haben diese Zahlen nun zu bedeuten ? Anzumerken wäre noch, dass die Delphi-IDE irgendwie die Ergebnisse bei einer Dateiumleitung verfälscht, weswegen ich immer erst compiliert habe, und dann das Programm per separater Eingabeaufforderung starte. |
Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist
Zitat:
Wenn GetConsoleMode() False liefert, dann bedeutet das doch, dass das übergebene Handle nicht auf ein Konsolenfenster verweist. Also muss die Ausgabe umgeleitet sein. Liefert GetConsoleMode() True, dann geht die Ausgabe an ein Konsolenfenster. |
Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist
Das war die Lösung, vielen Dank.
|
Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist
Gut. Dann hier noch für's Archiv und evtl. für die Code-Library:
Delphi-Quellcode:
function IsConsoleOutputRedirected:Boolean;
var Mode:DWORD; begin Result := GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), Mode); end; function IsConsoleInputRedirected:Boolean; var Mode:DWORD; begin Result := GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), Mode); end; |
Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist
Also laut Funktionsname geben die Funktionen an, ob das jeweilige Handle umgeleitet wird. Somit geben beide Funktionen soweit alles falsch herum zurück und es müsste ein not vor der Resultzuweisung stehen.
Falls dieser Code schon in der CodeLib ist, bitte korrigieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 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