![]() |
Wie ermittele ich ob eine Console zugewiesen ist?
Hallo
wenn ich mit
Delphi-Quellcode:
einen Text ausgebe. Bekomme ich in einer
WriteLn('Test');
Delphi-Quellcode:
Anwendung einen Fehler (EA Fehler 105).
{$APPTYPE GUI}
Das ist auch soweit verständlich. Es gibt ja keine Console zugewiesen ist zu der WriteLn schreiben könnte. Ich weise also mit
Delphi-Quellcode:
eine Konsole zu und kann nun mit WriteLn in diese Console schreiben.
AllocConsole
Wenn ich nun mit
Delphi-Quellcode:
die Konsole von der Anwendung trenne, kann ich natürlich nicht mehr mit WriteLn arbeiten -> Fehler (EA-Fehler 6)
FreeConsole;
Meine Frage: "Wie erkenne ich ob gerade eine Konsole zugewiesen ist?" Mein Lösungsansatz war:
Delphi-Quellcode:
Aber mit #0 wird trotzdem ein Leerzeichen auf den Bildschirm ausgegeben. Das dann mit DEL (#8) wieder gelöscht wird.
...
function isAllocConsole: Boolean; begin Result := False; try {$I-} Write(#0#8); // Write(''); funktioniert nicht, da nix ausgegeben wird :-( {$I+} Result := (IOResult = 0); except end; end; ... if isAllocConsole then WriteLn('DP RuLeZ'); ... Das ist aber keine gute Lösung, da bei z.B. einer Ausgabeumleitung in eine Datei viele #0#8 enthalten wären :-( Weiß jemand eine bessere Lösung? |
Re: Wie ermittele ich ob eine Console zugewiesen ist?
Wie wäre es mit
![]() |
Re: Wie ermittele ich ob eine Console zugewiesen ist?
Moin!
Im Normalfall setzen beide Funktionen die globale Variable IsConsole entsprechend. Ich möchte hier gleich auch nochmal auf einen Fehler Hinweisen in diesem Zusammenhang: Bei meinem Projekt habe ich auch nachträglich eine Konsole angelegt und das hatte aber sehr merkwürdige Nebeneffekte. Zum einen wurden Fenster und Klassen nicht mehr ordentlich und sauber abgeräumt und zum anderen funktionierte das minimieren des Hauptfenster nicht mehr (MDI App). Es ist also Vorsicht geboten. MfG Muetze1 |
Re: Wie ermittele ich ob eine Console zugewiesen ist?
Oder alternativ GetStdHandle()?
|
Re: Wie ermittele ich ob eine Console zugewiesen ist?
Zitat:
isConsole ist bei {APPTYPE GUI} immer FALSE !!! Auszug aus der system.pas:
Delphi-Quellcode:
in der Delphi Hilfe steht:
...
IsConsole: Boolean; { True if compiled as console app } ... Zitat:
|
Re: Wie ermittele ich ob eine Console zugewiesen ist?
Zitat:
@Mabuse: Du hast vollkommen recht mit dem Flag, da dieses bereits von der RTL vor dem Aufruf der Main (begin end. in der DPR) gesetzt wird. Es entspricht dem Flag in der EXE. |
Re: Wie ermittele ich ob eine Console zugewiesen ist?
Zitat:
Aber es klappt ;-)
Delphi-Quellcode:
function GetConsoleWindow:THandle; external kernel32 name 'GetConsoleWindow';
function isAllocConsole: Boolean; begin Result := GetConsoleWindow <> 0; end; |
Re: Wie ermittele ich ob eine Console zugewiesen ist?
Danke für alle Antworten :dp:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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