Forum: PC-Programmierung Konsolenanwendung einmal ganz genau


von Patrick O. (sir-patrick)


Lesenswert?

Hallo an alle!

Ich würd ja nicht fragen, wenn ich nicht der Meinung wäre, dass es 
wirklich was neues ist. Fasst jeder von euch hat doch bereits eine 
Konsolenanwendung programmiert. Doch anders als bei Programmen, bei 
denen man ein Fenster und ähnliches hart selbst programmieren muss, 
scheint dies bei Konsolenanwendungen nicht der Fall sein zu müssen. Ich 
möchte nun wissen, wo der große Unterschied zwischen Konsolenanwendungen 
und dem Rest liegt, und welche Arbeit mir der Compiler oder die IDE beim 
Erstellen einer Konsolenanwendung abnimmt.

Mit freundlichen Grüßen

       Patrick O.

von Stefan E. (sternst)


Lesenswert?

Patrick O. wrote:
> Doch anders als bei Programmen, bei
> denen man ein Fenster und ähnliches hart selbst programmieren muss,
> scheint dies bei Konsolenanwendungen nicht der Fall sein zu müssen.

Bei einer Konsolenanwendung muss man sich nie um die Programmierung 
irgendwelcher Fenster kümmern. Aber nicht, weil es einem abgenommen 
wird, sondern weil eine Konsolenanwendung einfach keine Fenster hat. Sie 
läuft auf/in einer Text-Konsole (daher der Name).

von Gerd G. (gege)


Lesenswert?

.. ausser man benutzt die Cursor-Steuerbefehle und versetzt den Cursor 
um ein textbasiertes Grafikfenster zu haben

GRuß

Gerd.

von Rolf Magnus (Gast)


Lesenswert?

> Ich möchte nun wissen, wo der große Unterschied zwischen
> Konsolenanwendungen und dem Rest liegt,

Das hängt vom System ab. Unter Linux gibt es z.B. keinen Unterschied. 
Unter Windows dagegen schon, da die Konsolenausgabe hier nicht einfach 
in ein virtuelles Terminal geleitet wird, sondern das Programm selbst 
ein Konsolen-Fenster aufmachen muß.

> und welche Arbeit mir der Compiler oder die IDE beim Erstellen einer
> Konsolenanwendung abnimmt.

Die IDE hat eigentlich nicht viel damit zu tun. Wenn's um Windows gehen 
sollte, so nimmt dir der Compiler das Erzeugen des Konsolenfensters und 
Umleiten der Standard-Ein- und -Ausgabe ab.

von Patrick O. (sir-patrick)


Lesenswert?

Der Initiator nochmal

Wie gehts?

Ich hätte da noch ne Frage. Kann es sein, dass es in ner dll von Windows 
ne Funktion gibt, die ein Konsolenfenster für den momentanen Prozess zur 
Verfügung stellt?

Auf wiederlesen

von Rolf Magnus (Gast)


Lesenswert?

> Kann es sein, dass es in ner dll von Windows ne Funktion gibt, die ein
> Konsolenfenster für den momentanen Prozess zur Verfügung stellt?

Ja, das kann sein.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

AllocConsole() ?

von Uhu U. (uhu)


Lesenswert?

Eine Windows-Konsolanwendung hat keine Message-Queue und kann daher 
keine Windowsmessages empfangen. Sie unterscheidet sich nicht 
prinzipiell von einer Anwendung, wie man sie früher für DOS schrieb - 
das verfügt über keinerlei Window-Funktionalität.

Man kann unter Windows sogar noch das alte DOS-API verwenden und 
.com-Programme schreiben - primitiver gings auch zu DOS-Zeiten nicht...

Das Konsolfenster, das sich beim Start einer Konsol-App öffnet, wird von 
Windows bereitgestellt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Sie unterscheidet sich nicht
> prinzipiell von einer Anwendung, wie man sie früher für
> DOS schrieb - das verfügt über keinerlei Window-Funktionalität.

Nicht ganz. Einerseits kann eine Win32-Konsolenapplikation die Win32-API 
verwenden, was doch ein kleines bisschen andere Möglichkeiten bietet, 
andererseits kann eine Win32-Konsolenapplikation durchaus auch mit 
Windows-Fenstern zusammenarbeiten, am simpelsten geht das beispielsweise 
mit MessageBox(), aber auch das Senden von Nachrichten an andere Fenster 
ist möglich. Ebenso kann eine Konsolenapplikation nachträglich einen 
Nachrichtenhandler installieren und dann auf "normale" Art und Weise mit 
Fenstern hantieren.

von Patrick O. (sir-patrick)


Lesenswert?

Wird das Konsolenfenster also vom Betriebssystemgeöffnet, nachdem oder 
bevor es den Portable Executable Kopf der anwednung durchgegangen is?

Aber woher weiß das BS nun, dass es das dann doch nicht öffnen muss? Zum 
Beispiel bei ner Fensteranwendung.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das wird durch Flags im PE Header entschieden, wie

 IMAGE_SUBSYSTEM_WINDOWS_GUI

und

 IMAGE_SUBSYSTEM_WINDOWS_CUI.

Damit ist also auch klar, daß das Konsolenfenster erst nach 
Interpretation der Flags geöffnet/erzeugt oder beibehalten wird.

von Uhu U. (uhu)


Lesenswert?

Rufus t. Firefly wrote:
> Damit ist also auch klar, daß das Konsolenfenster erst /nach/
> Interpretation der Flags geöffnet/erzeugt oder beibehalten wird.

Allerdings wird das festgestellt, bevor die Applikation zum ersten mal 
die Kontrolle erhält.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ja, eindeutig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.