Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist ? (https://www.delphipraxis.net/112872-wie-herausbekommen-ob-konsolen-dateiumleitung-aktiv-ist.html)

DevidEspenschied 28. Apr 2008 17:47


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.

shmia 28. Apr 2008 19:00

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.

DevidEspenschied 29. Apr 2008 10:57

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 hier verstanden habe, kann man ein DWord als Rückgabewert deklarieren, der den Konsolenstatus widerspiegelt. Dieser Wert ist bei einem normalen Konsolenstart 3, bei einer Dateiumleitung hingegen 0.

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.

shmia 29. Apr 2008 16:40

Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist
 
Zitat:

Zitat von devidespe
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.

Ich denke eher, dass der 2. Parameter uninteressant ist.
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.

DevidEspenschied 30. Apr 2008 09:55

Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist
 
Das war die Lösung, vielen Dank.

shmia 30. Apr 2008 11:05

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;

Muetze1 27. Mai 2008 23:17

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