Entwickler-Ecke
Windows API - Standardausgabe Umleiten in die Konsole(WriteLn)
reimo - Do 06.09.07 14:27
Titel: Standardausgabe Umleiten in die Konsole(WriteLn)
Hi!
möchte abhängig davon, ob das programm mit parametern aufgerufen wordes ist oder nicht, es entweder als Konsolen (mit Parameter) oder Win-Anwendung laufen lassen!
hab mir gedacht, dass ich im dpr-File eine Abfrage einbau, ob Parameter übergeben worden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| if ParamCount > 0 then begin writeln('32423'); end else begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end; |
meine erste frage ist: Darf ich das machen???
und das zweite wäre: Da die Applikation nicht als konsolenanwendung kompiliert wurde, ist die Ausgabe von writeln nicht auf StandardOut gesetzt!
Wie mach ich das jetzt aber, dass obwohl nicht als konsolenanwendung kompiliert, ich trotzdem in die konsole schreiben kann?
danke!
ene - Do 06.09.07 15:01
Hi,
folgendes in die DPR nach Program XXX einfügen:
Und dann kannst du das so in der DPR auswerten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| If (Bedingung=True) Then Begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; Application.Run; End Else Begin Writeln('3234'); End; |
reimo - Do 06.09.07 15:31
ene hat folgendes geschrieben: |
Hi,
folgendes in die DPR nach Program XXX einfügen:
Und dann kannst du das so in der DPR auswerten:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| If (Bedingung=True) Then Begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; Application.Run; End Else Begin Writeln('3234'); End; | |
Hi,
danke, aber mit dieser methode wird immer ein konsolenfenster miterzeugt, egal ob ich das programm mit parametern oder ohne erzeuge!
ich möchte aber nur dann eine konsolenanwendung, wenn parameter übergeben wurden.
GTA-Place - Do 06.09.07 15:37
Titel: Re: Standardausgabe Umleiten in die Konsole(WriteLn)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if ParamCount > 0 then begin writeln('32423'); end else begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end; |
ParamCount ist immer > 0, weil als 1. Parameter der Pfad des Programmes übergeben wird. Also wenn, dann auf > 1 prüfen.
reimo - Do 06.09.07 15:50
Titel: Re: Standardausgabe Umleiten in die Konsole(WriteLn)
GTA-Place hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if ParamCount > 0 then begin writeln('32423'); end else begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end; |
ParamCount ist immer > 0, weil als 1. Parameter der Pfad des Programmes übergeben wird. Also wenn, dann auf > 1 prüfen. |
nein, eben nicht! ;o)
JayEff - Do 06.09.07 16:13
Titel: Re: Standardausgabe Umleiten in die Konsole(WriteLn)
reimo hat folgendes geschrieben: |
nein, eben nicht! ;o) |
Da hat er Recht. (getestet).
Nun, die einzige Möglichkeit eine Compilerdirektive weg zubekommen ist mit einer anderen Direktive. Problem dabei: diese Direktive (
{$IF} {$ENDIF} ) kann (natürlich) nur Konstanten abfragen, da die Änderung vom Compiler vorgenommen wird und nicht erst zur Laufzeit.
Eine denkbare Lösung wäre ein zweites Programm mitzuliefern(eine Console app), welches mit evtl. vorhandenen Parametern gestartet wird, wenn ParamCount>0 ist, dann wird das Hauptprogramm beendet.
reimo - Do 06.09.07 16:18
Titel: Re: Standardausgabe Umleiten in die Konsole(WriteLn)
JayEff hat folgendes geschrieben: |
reimo hat folgendes geschrieben: | nein, eben nicht! ;o) | Da hat er Recht. (getestet).
Nun, die einzige Möglichkeit eine Compilerdirektive weg zubekommen ist mit einer anderen Direktive. Problem dabei: diese Direktive ( {$IF} {$ENDIF} ) kann (natürlich) nur Konstanten abfragen, da die Änderung vom Compiler vorgenommen wird und nicht erst zur Laufzeit.
Eine denkbare Lösung wäre ein zweites Programm mitzuliefern(eine Console app), welches mit evtl. vorhandenen Parametern gestartet wird, wenn ParamCount>0 ist, dann wird das Hauptprogramm beendet. |
ok, das mit der zweiten app wäre möglich! aber es geht sicher auch anders! ich muss doch den Output für WriteLn,... irgendwie im code umleiten können! kann ich mir nicht den devicecontext vom Konsolenfenster holen und dann den output hinleiten? kenn mich da leider zuwenig aus, aber das müsste doch gehen
BenBE - Do 06.09.07 17:38
IIRC konnte man auch für eine Nicht-Konsolen-Anwendung nachträglich die Konsole initialisieren und damit das Konsolen-Fenster nutzen. Find aber grad in den System-Units nicht die nötigen Stellen.
Reinhard Kern - Do 06.09.07 18:42
BenBE hat folgendes geschrieben: |
IIRC konnte man auch für eine Nicht-Konsolen-Anwendung nachträglich die Konsole initialisieren und damit das Konsolen-Fenster nutzen. Find aber grad in den System-Units nicht die nötigen Stellen. |
Nix System, Win32-API: AllocConsole.
Gruss Reinhard
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!