AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konsole oder was?

Ein Thema von MaBuSE · begonnen am 23. Jun 2004 · letzter Beitrag vom 24. Jun 2004
Antwort Antwort
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Konsole oder was?

  Alt 23. Jun 2004, 17:24
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:
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.
Das bringt ja leider nichts, weil isConsole ja nur angibt, ob es sich um ein Konsolenprogramm handelt.

Frage:
Wie krieg ich raus, ob eine Anwendung aus dem "Textfenster" gestartet wurde oder nicht?

Deshalb der Titel: "Konsole oder was?"

Danke für die vielen Antworten...

ps: hoffentlich ließt das NicoDE, der kennt sich doch mit so was aus
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Konsole oder was?

  Alt 23. Jun 2004, 17:27
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:
if LowerCase(ParamStr(1)) = '/cthen
begin
  Application.CreateForm(...
//Originaler Code der DPR
end
else
//Konsolensachen
Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: Konsole oder was?

  Alt 23. Jun 2004, 17:33
Zitat von alcaeus:
Du könntest es mit einem Parameter realisieren. Wenn das Programm in der Konsole aufgerufen wird, soll einfach "/c" als Parameter übergeben werden.
Danke, aber genau das will ich nicht !!!

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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Konsole oder was?

  Alt 23. Jun 2004, 20:27
Moin Mabuse,

folgendes könnte funktionieren:

Entferne aus dem Konsolenprogramm die Zeile {$APPTYPE CONSOLE}
Anschliessend kannst Du mit

Delphi-Quellcode:
  if GetStdHandle(STD_INPUT_HANDLE) = 0 then begin
    ShowMessage('KEINE KONSOLE');
  end else begin
    ShowMessage('KONSOLE');
  end;
überprüfen, ob das Programm mittels Doppelclick aus dem Explorer heraus gestartet wurde, oder innerhalb einer Konsole.

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#5

Re: Konsole oder was?

  Alt 23. Jun 2004, 20:39
Zitat von MaBuSE:
hoffentlich ließt das NicoDE, der kennt sich doch mit so was aus
Es gibt leider nicht unter allen Win32-Versionen die Möglichkeit herauszufinden, ob der eigene Prozess in der Konsole des Vaterprozesses ausgeführt wird, sorry. Selbst dann bleiben noch diverse Fragen offen (Erkennung von Umleitungen der Standard-Ausgabe, etc.).
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Konsole oder was?

  Alt 23. Jun 2004, 20:45
Zitat von Christian Seehase:
Delphi-Quellcode:
if GetStdHandle(STD_INPUT_HANDLE) = 0 then begin
    ShowMessage('KEINE KONSOLE');
  end else begin
    ShowMessage('KONSOLE');
  end;
Aber eigentlich braucht man doch da nicht immer begin und end zu schreiben; du hast doch immer nur eine Anweisung zu erledigen
Julian J. Pracht
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Konsole oder was?

  Alt 23. Jun 2004, 20:57
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Konsole oder was?

  Alt 24. Jun 2004, 09:34
Zitat von Christian Seehase:
folgendes könnte funktionieren: ...
Danke, das werd ich mal heute Abend probieren.

Zitat von NicoDE:
Es gibt leider nicht unter allen Win32-Versionen die Möglichkeit herauszufinden, ob der eigene Prozess in der Konsole des Vaterprozesses ausgeführt wird, sorry. Selbst dann bleiben noch diverse Fragen offen (Erkennung von Umleitungen der Standard-Ausgabe, etc.).
Das wollte ich eigentlich nicht hören, aber danke
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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Konsole oder was?

  Alt 24. Jun 2004, 10:32
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 von Delphi OH:
Bei anderen Anwendungen sführt jeder Versuch, aus Input zu lesen oder in Output zu schreiben, zu einem E/A-Fehler.
Somit: Wie willst du das machen? Grundlegend sehe ich da nur die Möglichkeit entweder die DFM's zur Laufzeit selbst aus den Resourcen zu laden und aufzubauen oder eine nonVCL Fensterumgebung aufbauen.

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
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: Konsole oder was?

  Alt 24. Jun 2004, 10:40
Zitat von Muetze1:
2. Wenn du {$APPTYPE CONSOLE} entfernst, dann klappen zwar die Forms, aber laut Delphi nicht WriteLn() und Co
Zitat von Delphi OH:
Bei anderen Anwendungen sführt jeder Versuch, aus Input zu lesen oder in Output zu schreiben, zu einem E/A-Fehler.
Somit: Wie willst du das machen? Grundlegend sehe ich da nur die Möglichkeit entweder die DFM's zur Laufzeit selbst aus den Resourcen zu laden und aufzubauen oder eine nonVCL Fensterumgebung aufbauen.
Das geht relativ Einfach:
Delphi-Quellcode:
  if not IsConsole then
    Windows.AllocConsole;
Danach kann man WriteLn benutzen

Zitat von Muetze1:
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...
Das weiss ich!
Das Habe ich ja auch in meiner Frage geschrieben.
Zitat von MaBuSE:
Das bringt ja leider nichts, weil isConsole ja nur angibt, ob es sich um ein Konsolenprogramm handelt.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  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 21:47 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