AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist ?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist ?

Ein Thema von DevidEspenschied · begonnen am 28. Apr 2008 · letzter Beitrag vom 28. Mai 2008
Antwort Antwort
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
439 Beiträge
 
Delphi 12 Athens
 
#1

Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist ?

  Alt 28. Apr 2008, 18:47
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.
Devid
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist

  Alt 28. Apr 2008, 20:00
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.
Andreas
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
439 Beiträge
 
Delphi 12 Athens
 
#3

Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist

  Alt 29. Apr 2008, 11:57
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.
Devid
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist

  Alt 29. Apr 2008, 17:40
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.
Andreas
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
439 Beiträge
 
Delphi 12 Athens
 
#5

Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist

  Alt 30. Apr 2008, 10:55
Das war die Lösung, vielen Dank.
Devid
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist

  Alt 30. Apr 2008, 12:05
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;
Andreas
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Wie herausbekommen, ob Konsolen-Dateiumleitung aktiv ist

  Alt 28. Mai 2008, 00:17
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.
  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 08:03 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