![]() |
Konsole oder was?
Hallo,
Folgende Situation: Ich möchte ein Programmschreiben, das wenn es aus der Konsole aufgerufen wird eine Textausgabe bringt, wenn es aber aus Windows direkt (Explorer oder so) aufgerufen wird soll ein Form erscheinen.
Delphi-Quellcode:
Das bringt ja leider nichts, weil isConsole ja nur angibt, ob es sich um ein Konsolenprogramm handelt.
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin if isConsole then begin WriteLn('Konsole ist geil.'); end else begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end; end. Frage: Wie krieg ich raus, ob eine Anwendung aus dem "Textfenster" gestartet wurde oder nicht? Deshalb der Titel: "Konsole oder was?" :mrgreen: Danke für die vielen Antworten... :dp: ps: hoffentlich ließt das NicoDE, der kennt sich doch mit so was aus :zwinker: |
Re: Konsole oder was?
Du könntest es mit einem Parameter realisieren. Wenn das Programm in der Konsole aufgerufen wird, soll einfach "/c" als Parameter übergeben werden.
In der DPR-Datei schreibst du dann
Delphi-Quellcode:
Greetz
if LowerCase(ParamStr(1)) = '/c' then
begin Application.CreateForm(... //Originaler Code der DPR end else //Konsolensachen alcaeus |
Re: Konsole oder was?
Zitat:
Mein Programm ist ein Konsolenprogramm. Es gibt natürlich Spezialisten, die klicken im Explorer drauf und wundern sich, das ein Fenster auf und wieder zu geht. Es soll dann eine Meldung kommen z.B.: "Das ist nix für Dich, starte ein anderes Programm :-)" Ich will aber auch die Konsolenanwender nicht mit einem Parameter /nogui oder so strafen. Nur dazu müsste man natürlich erkennen wie es gestartet wurde. |
Re: Konsole oder was?
Moin Mabuse,
folgendes könnte funktionieren: Entferne aus dem Konsolenprogramm die Zeile {$APPTYPE CONSOLE} Anschliessend kannst Du mit
Delphi-Quellcode:
überprüfen, ob das Programm mittels Doppelclick aus dem Explorer heraus gestartet wurde, oder innerhalb einer Konsole.
if GetStdHandle(STD_INPUT_HANDLE) = 0 then begin
ShowMessage('KEINE KONSOLE'); end else begin ShowMessage('KONSOLE'); end; Bleibt der Apptype auf Console, so würde Windows bei einem Doppelclick erkennen, dass es eine Konsole starten, und innerhalb dieser Dein Programm ausführen soll, lässt Du den weg, dann entfällt das. |
Re: Konsole oder was?
Zitat:
|
Re: Konsole oder was?
Zitat:
|
Re: Konsole oder was?
Moin Ultimator,
stimmt, notwendig ist es nicht, aber wenn ich else verwende mache ich das immer. Ich finde das übersichtlicher. Sollte es hierzu noch weiteren Diskussionsbedarf geben, möchte ich aber darum bitten dies in einem gesonderten Thread zu tun, da es doch ziemlich OT ist. Danke. |
Re: Konsole oder was?
Zitat:
Zitat:
Die meisten Anwender werden wohl me, w2k und xp einsetzen. Gibt es da eine gute Möglichkeit fest zustellen ob Text oder GUI? Win 95, 98 kann ich vernachlässigen. Ich möchte mein DP ShoutBox Reader ausbauen. Ein Bennutzer schrieb in der Bewertung, dass nur ein schwarzes Fenster aufging und sich wieder schloss ;-( Es soll dann entweder eine GUI starten, oder eine Meldung kommen. Das ist der Einsatzzweck. Ich glaube Umleitungen und Sonstiges brauche ich nicht zu berücksichtigen. Im schlimmsten Fall geht halt eine GUI auf :-) Für Problemfälle kann man ja dann doch einen Schalter /forceConsole einbauen. Vielen Dank für die Antworten. |
Re: Konsole oder was?
Moin!
Ich sehe da noch ein grundlegendes Problem: Also nochmal zur Überlegung eine kleine Liste... 1. Wenn du {$APPTYPE CONSOLE} in deinem Programm drinne hast, dann funktioniert WriteLn() und die anderen, aber ein Form musst du er umständlich erzeugen. 2. Wenn du {$APPTYPE CONSOLE} entfernst, dann klappen zwar die Forms, aber laut Delphi nicht WriteLn() und Co Zitat:
Nochwas: IsConsole() hilft da eigentlich wenig, weil sich diese immer direkt an {$APPTYPE CONSOLE} orientiert, weil dieser Switch veranlasst ihn die Stdio's zu initialisieren, ergo... MfG Muetze1 |
Re: Konsole oder was?
Zitat:
Delphi-Quellcode:
Danach kann man WriteLn benutzen ;-)
if not IsConsole then
Windows.AllocConsole; Zitat:
Das Habe ich ja auch in meiner Frage geschrieben. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 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