![]() |
Konsole oder keine Konsole?
Ich habe ein kleines Problem mit der Konsole. Mein Programm soll beim Start herausfinden, ob es von der Konsole aus gestartet wurde oder nicht. Wenn es von der Konsole gestartet wurde, dann soll es als Konsolenanwendung starten, wenn es nicht von der Konsole gestartet wurde, dann soll es eine normale VCL-Anwendung sein.
Es geht hierbei wirklich nur um die Eingaben des Benutzers (entweder auf Konsolenebene oder eben auch in ein Fenster). Momentan regle ich dies über 2 EXE-Dateien, der Anwender muß also selbst entscheiden, welche Variante er nimmt. Also ganz kurz: Wie kann eine Anwendung erkennen, ob es von der Konsole gestartet wurde? Bis zur Erkennung soll das Programm ohne Konsole und ohne Fenster laufen. Wenn das Programm nun herausgefunden hat, daß es von der Konsole läuft, wie bekomme ich es hin, daß es jetzt selbst als Konsolenapplikation läuft? |
Sorry, sollte eigentlich an anderer Stelle im Forum landen
Tja, bei den vielen Fenstern kann man sich schonmal verhaspeln.
|
Re: Konsole oder keine Konsole?
Beides: Gar nicht.
Du bekommst es nicht raus. Als "Hack" kannst du natürlich gucken ob ein cmd fenster offen ist und ob darin gerade eine Anwendung gestartet wurde, aber wer deinen Anwendung gestartet hat, wirst du nicht rausbekommen. Eine Möglichkeit wäre, dass du die Parameter auswertest und wenn z.B. "-cmd" angegeben wurde, sartest du als Konsolenanwendung und sonst mit GUI. Und zum zweiten ist deine Anwendung bereits eindeutig als Konsolen oder GUi Anwendung gebrandmarkt, bevor du überhaupt die Kontrolle bekommst. Im Header der Exe steht nämlich so n Flag dass das festlegt. Du kannst natürlich eine Konsolenanwendung schreiben, die sich dann selber versteckt und ein Formular öffnet. Kurzzusammenfassung: Lass es bei den 2 Anwendungen, das ist schon mehr Service als man erwarten kann (Wer liefert heutzutage noch eine Konsolenversion mit?) ;) |
Re: Konsole oder keine Konsole?
Hallo,
Bei codeproject.com gibt es eine Möglichkeit. Ist auch nichtmal so schwer zu implementieren: ![]() Gruß Neutral General |
Re: Konsole oder keine Konsole?
ich würde es wie beim Shutdown-Befehl von Windows handhaben. Wer die Gui sehen will muss einfach einen Parameter mitgeben welcher das GUI anzeigt.
|
Re: Konsole oder keine Konsole?
Zitat:
Delphi-Quellcode:
Um festzustellen ob das Programm mit einem Konsolenfenster verbunden ist kann ab win2000 GetConsoleWindow() verwendet werden.
procedure writestdout(value: string; newline: boolean = false);
{$ifdef mswindows} var ca1: longword; {$endif} begin if newline then begin value:= value + lineend; end; {$ifdef UNIX} __write(1,pointer(value)^,length(value)); {$else} if getstdhandle(std_output_handle) <= 0 then begin allocconsole; end; writefile(getstdhandle(std_output_handle),pointer(value)^,length(value),ca1,nil); {$endif} end; ![]() Martin |
Re: Konsole oder keine Konsole?
Zitat:
|
Re: Konsole oder keine Konsole?
Mal so dazwischen gefragt,
wofür soll das gut sein? Der Unterschied liegt doch eigentlich "nur" in der Ausgabe, was natürlich auch die Programmsteuerung durch den Benutzer beeinflusst). Gruß K-H Oh man, ich hab den inhalt der Ursprungsfrage nicht richtig gelesen! *schäm* |
Re: Konsole oder keine Konsole?
Delphi-Quellcode:
Wenn
if AttachConsole(ATTACH_PARENT_PROCESS) then
{Console ist vorhanden} ![]()
Delphi-Quellcode:
Die Anwendung darf aber nicht als Konsolenanwendung deklariert sein, sonst erstellt Windows automatisch eine Console, wenn noch keine vorhanden ist. Also am Besten das {$APPTYPE ganz einfach weglassen.
{$APPTYPE CONSOLE}
Dieser Code läuft jedenfalls bei mir recht gut.
Delphi-Quellcode:
Var ConsoleCreated, B: Boolean;
ConsoleHandle: THandle; B := AttachConsole(ATTACH_PARENT_PROCESS); {$IFDEF CreateConsole} ConsoleCreated := not B; If ConsoleCreated Then B := AllocConsole; {$ELSE} ConsoleCreated := False; {$ENDIF} If B Then Begin ConsoleHandle := GetStdHandle(STD_OUTPUT_HANDLE); ... End Else ConsoleHandle := INVALID_HANDLE_VALUE; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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