Hallo,
ich habe hier ein C-Programm für die Win32-Konsole welches auf den
Vollbildmodus angewiesen ist. Um letzteren einzuschalten nutze ich die
SetConsoleDisplayMode()-Funktion der Win-API. Unter Win XP funktioniert
das auch prima. Jetzt soll das Programm auch auf einem anderen PC unter
Windows 7 laufen und da wird es kompliziert: Der Aufruf von
SetConsoleDisplayMode() erzeugt einen Fehler, GetLastError liefert
ERROR_CALL_NOT_IMPLEMENTED --> This function is not supported on this
system. Arghh!!!
Einigen Google-Ergebnissen nach lässt sich die Konsole manuell nicht
ohne Weiteres in den Vollbildmodus schalten, ob es per API geht konnte
ich nicht rausfinden.
Kennt sich da jemand aus?
Zusammengefasst : Ich suche eine Möglichkeit das Konsolenfenster unter
Windows 7 mittels C-Code in den Vollbildmodus zu versetzen.
Das Dumme ist dass ich selber kein W7 zum testen habe und der PC steht
viele Kilometer entfernt bei einem DAU. :-(
ARGGHHHHH! Gibts doch nicht! Ich brauche 80 x 50 Zeichen (horizontal x
vertikal) und das möglichst bildschirmfüllend, lässt sich da was machen?
Ich hab wie gesagt kein W7 zur Hand und kenne das OS nicht (bei mir
läuft XP).
Jetzt habe ich ein großes Problem. :-(
raketenfred schrieb:> kriegt man das nicht ggf. mit einem XP-Mode/Kompatbilität hin?!
Die Antwort von Rufus klingt irgendwie nicht so.
> MS bietet im Inet Testversionen von Win7 an
Hm, zum Testen wäre das ganz gut. Kann man die auch in irgendeinem
virtuellen Dingsda ausführen? Ich hab da keine Ahnung und eine direkte
Installation von W7 auf eine freie Partition ist mir nichts...
Vielleicht lässt sich ja irgendwie das Fenster "aufblasen" (Schriftgröße
erhöhen) ohne gleich in den Vollbildmodus zu gehen, ohne Testsystem ist
das aber verlorene Zeit.
Was hat sich MS da nur wieder gedacht???
Die Größe des Konsolenfensters lässt sich per Software auf die
gewünschte 80x50-Darstellung einstellen, und die verwendete Schriftart
lässt sich auch innerhalb gewisser Grenzen beeinflussen.
Sieh Dir mal die Dokumentation der folgenden Funktionen an:
GetCurrentConsoleFont
SetCurrentConsoleFontEx
GetLargestConsoleWindowSize
In so einem Fall aber wäre ein Verzicht auf die Konsolennutzung
sinnvoller, ein richtiges Fenster aufmachen und darin den Text so
darstellen, wie er dargestellt werden soll, das ist etwas, was in
üblichen Programmiersprachen keine unüberwindbare Hürde darstellt.
Rufus Τ. Firefly schrieb:> Die Größe des Konsolenfensters lässt sich per Software auf die> gewünschte 80x50-Darstellung einstellen, und die verwendete Schriftart> lässt sich auch innerhalb gewisser Grenzen beeinflussen.>> Sieh Dir mal die Dokumentation der folgenden Funktionen an:> GetCurrentConsoleFont> SetCurrentConsoleFontEx> GetLargestConsoleWindowSize
Werde ich machen.
> In so einem Fall aber wäre ein Verzicht auf die Konsolennutzung> sinnvoller, ein richtiges Fenster aufmachen und darin den Text so> darstellen, wie er dargestellt werden soll, das ist etwas, was in> üblichen Programmiersprachen keine unüberwindbare Hürde darstellt.
Nu ja... Ich bin nur Hobbyprogrammierer und bisher konnte ich alle
Probleme mit bzw. in der Konsole lösen. Mit ein paar API-Aufrufen lässt
sich der Text auch ziemlich einfach an beliebige Positionen schreiben,
falls nötig sogar in Farbe, unter XP läuft alles prima und außerdem -
ich mag diesen "Retro-Look". :-) Ich hatte mir mal GTK angeschaut aber
irgendwie, was soll ich mir Arbeit machen wenn sich >90% der Probleme
mit printf und getch erschlagen lassen?
Im konkreten Fall wäre das mit dem Fenster sowieso schwierig, ist eine
Art Spiel und dieser Konsolenlook gehört irgendwie dazu. Das ganze ist
ein rein privates Spaßprojekt, der Spaß geht aber gerade gegen Null. Ich
glaub ich leg die W7-Unterstützung erstmal auf Eis, schade drum. Das
heisst nämlich auch das noch mindestens ein weiteres Programm welches
sich in der Entwicklungsphase befindet erstmal in den Winterschlaf
versetzt wird. :-(
Warum haben die bloss den Vollbildmodus entfernt?
Die Sache mit der W7-Demo scheint auch nicht gewonnen, Google lieferte
mir Virtualbox um einen virtuellen PC zu simulieren aber laut Wiki läuft
da kein W7 drin. :-(
MS immer für eine Überraschung gut, ach ich liebe es einfach. :-(
xpler schrieb:> Warum haben die bloss den Vollbildmodus entfernt?
weil er keinen Sinn mehr Macht. Es gibt leute die Arbeiten z.b. mit
RemoteDesktop oder Terminalserver dort hat der Server keine Kontrolle
über die Bildschirmauflösung.
Es hindert dich niemand daran eine richtiges Windowsprogramm zu
schreiben was im Vollbild läuft und dort das alte Design hat.
Peter II schrieb:> Es hindert dich niemand daran eine richtiges Windowsprogramm zu> schreiben was im Vollbild läuft und dort das alte Design hat.
Meine nicht vorhandenen Kenntnisse in Sachen "Fensterprogrammierung"
hindern mich dran. OK, kann man natürlich nachlesen und lernen, aber für
ein Spaßprojekt mit vielleicht 1k LOC hab ich keine Lust nochmal 500
Zeilen API-Gemurkse produzieren zu müssen.
Peter II schrieb:> Ist dein Programm nur im Dos Design oder reicht dir auch ein Dos> darunter?
Das verstehe ich nicht, was meinst du?
bluppdidupp schrieb:> Gib dir nen Ruck und schau dir Fensterzeugs an - Je nach Framework sinds> nur wenige Zeilen ;D
Vielleicht später, für heute ists gut.
xpler schrieb:>> Ist dein Programm nur im Dos Design oder reicht dir auch ein Dos>> darunter?> Das verstehe ich nicht, was meinst du?
ist es ein 16bit Programm was unter Dos noch läuft?
Peter II schrieb:> xpler schrieb:>>> Ist dein Programm nur im Dos Design oder reicht dir auch ein Dos>>> darunter?>> Das verstehe ich nicht, was meinst du?>> ist es ein 16bit Programm was unter Dos noch läuft?
Äh - wie findet man das raus? Ist eine "ganz normale" exe welche von gcc
erzeugt wurde.
OK, hab die Datei gerade durch File Analyzer geschoben, die Antwort
steckt wohl im Hex Dump:
> This Programm cannot be run in DOS mode.
und unter PE-Header steht:
> Characteristics: 030F - Relocs Stripped, Executable, Line Numbers> Stripped, Local Symbols Stripped, 32bit Machine Expected , Debug Data> Stripped
Also lautet die Antwort wohl: Nein.
xpler schrieb:>> ist es ein 16bit Programm was unter Dos noch läuft?> Äh - wie findet man das raus? Ist eine "ganz normale" exe welche von gcc> erzeugt wurde.
Nein, ein DOS-Programm ist Dein Programm natürlich nicht.
Du hast eine Win32-Konsolenapplikation geschrieben, denn sonst könntest
Du gar nicht die verschiedenen Konsolfunktionen aufrufen.
Lustig. Heutzutage wissen die Programmierer nicht mal, was sie da
eigentlich für Programme schreiben. Spiegelt wohl den allgemeinen
Bildungsstand in D wieder...
xpler schrieb:> Die Sache mit der W7-Demo scheint auch nicht gewonnen, Google lieferte> mir Virtualbox um einen virtuellen PC zu simulieren aber laut Wiki läuft> da kein W7 drin. :-(
Merke: Wer lesen kann ist klar im Vorteil.
Wikipedia schrieb:
> Außer den unterstützten Wirtsystemen können noch zusätzlich folgende> Systeme virtualisiert werden:> Microsoft Windows NT, 2000> Folgende Wirtsysteme (engl. host system) werden von der aktuellen Version> unterstützt:> *Microsoft Windows 7*http://de.wikipedia.org/wiki/Virtualbox#Unterst.C3.BCtzte_Betriebssysteme
Ich hab das ganze mal ausprobiert, die W7-Demo läuft prima. Ist ein
bisschen haarig mit nur 1GB RAM aber es klappt. Mal gucken was man mit
den von Rufus empfohlenen Funktionen machen kann, dazu muss ich erstmal
eine Toolchain unter W7 einrichten. Ich wollte zunächst erstmal unter XP
basteln aber SetCurrentConsoleFontEx() gibts erst ab Vista und
GetCurrentConsoleFont() ist (obwohl es laut MSDN unter XP existiert)
auch unbekannt und erzeugt einen Linkerfehler...
xpler schrieb:> Peter II schrieb:>> Es hindert dich niemand daran eine richtiges Windowsprogramm zu>> schreiben was im Vollbild läuft und dort das alte Design hat.> Meine nicht vorhandenen Kenntnisse in Sachen "Fensterprogrammierung"> hindern mich dran. OK, kann man natürlich nachlesen und lernen, aber für> ein Spaßprojekt mit vielleicht 1k LOC hab ich keine Lust nochmal 500> Zeilen API-Gemurkse produzieren zu müssen.
Das kenne ich :-)
Besorg dir eine vernünftige Bibliothek für VT100 oder sowas (ncurses
z.B.) und schreib damit den Programm. Benutze dann einen gescheiten
Terminal-Emulator.
Sven P. schrieb:> Besorg dir eine vernünftige Bibliothek für VT100 oder sowas (ncurses> z.B.) und schreib damit den Programm. Benutze dann einen gescheiten> Terminal-Emulator.
Äh... Ich bin nur dummer Hobbyprogrammierer, langsam bitte... Dieses
ncurses dient dazu unter Linux die Ausgaben in/für die Konsole (also
das schwarzweiße Fenster wo die Hacker ihre Zaubersprüche eingeben)
unabhängig von der genauen Linuxversion oder irgendwas anderem (was?) zu
formatieren, richtig? In wie fern hilft mir das unter Windows und was
genau ist ein "Terminalemulator"? Bei Wikipedia gehts da um Großrechner
und unter "Terminal" findet man Technik aus dem letzten Jahrtausend. Hä?
xpler schrieb:> Jetzt ist aber gut!> Kann mir mal jemand sagen warum das unter W7 nicht funktioniert?
nein, bei mir geht es. Aber du verwendest ja den GCC ich vermute mal
deine Header Dateien sind zu alt.
Wo hast du die Windows-header Dateien überhaupt her, sind bei beim gcc
für windows dabei?
Unter windows würde ich aber auch nicht den gcc verwenden, immerhin hat
ms ja auch eine recht guten kostenlosen compieler. Du braucht dafür
nicht mal das VisualStudio wenn du nicht willst. Man kann sich auch das
Platform SDK laden. Damit müsste alles gehen was du brauchst.
xpler schrieb:> Sven P. schrieb:>> Besorg dir eine vernünftige Bibliothek für VT100 oder sowas (ncurses>> z.B.) und schreib damit den Programm. Benutze dann einen gescheiten>> Terminal-Emulator.> Äh... Ich bin nur dummer Hobbyprogrammierer, langsam bitte...
Nunja, viele Programmierer haben ein völlig falsches Verständnis zu
ihrem 'Konsolen'-Programm. Vorallem diejenigen, die sich mit Visual
Studio quälen.
Ein Konsolenprogramm nimmt Eingaben entgegen und erzeugt Ausgaben,
Punkt. Wo erstere herkommen und wo leztere hingehen, ist völlig wurscht.
Entsprechend erübrigen sich auch solche Hirnkrämpfe wie
'system("pause")' und 'getch(); getch();' und anderweitige Funktionen,
um irgendwie am 'Konsolenfenster' herumzudoktorn. Ein Konsolenprogramm
kennt all das nicht! Es hat einen Grund, warum derartige Funktionen
nicht im Standard-C verankert sind.
In aller Regel aber kommen die Eingaben vom Benutzer, also von der
Tastatur oder vom Fernschreiber, und die Ausgaben gehen wieder an den
Benutzer, meistens über den Bildschirm oder aber auch auf dem Drucker.
Davon aber bekommt ein Konsolenprogramm garnichts mit. Und da siehst du
es: Versuche mal, das Papierformat im Drucker umzuprogrammieren. Eben.
Wie der Drucker die Ausgabe zu Papier bringt, ist seine Sache. Davon
bekommt das Konsolenprogramm garnichts mit. Vielleicht läuft dein
Konsolenprogramm ja in einem Rechenzentrum weit weg, und du stehst
lediglich über eine Telefonleitung damit in Verbindung.
Für dich als Benutzer heißt das: Um ein Konsolenprogramm zu benutzen,
musst du irgendwie Daten von der Tastatur in das Programm hineinbekommen
und die Ausgabe des Programmes musst du irgendwie lesbar machen. Du
könntest z.B. die Eingabe mit einem Texteditor in eine Datei tippen und
die Ausgabe des Programmes in einer anderen Datei auffangen und dir
diese anschließend im Editor anschauen.
Oder aber du benutzt ein weiteres Hilfsprogramm, welches gewissermaßen
deine Eingabe liest, durch das Konsolenprogramm durchreicht und die
Ausgabe auffängt und anzeigt. Das ist dann ein Terminalemulator.
Es sollte sich dir jetzt erschließen, warum 'system("pause")' so
überflüssig ist: Auf ein Konsolenprogramm doppelklickt man nicht und
wundert sich dann, warum man nur kurz ein schwarzes Fenster aufblitzen
sieht. Das wäre in etwa so, wie wenn du einen Haufen Lochkarten in den
Briefkasten des Rechenzentrums schaufelst.
Viel sinnvoller wäre doch: Erst Fernschreiber (Tastatur) und Drucker
(Bildschirm) einschalten/einwählen, DANN das Programm starten und zum
Schluss alles wieder abschalten. Ebenso gehört sich das: Einen
Terminalemulator starten, das Programm damit ('darin') starten, und den
Emulator wieder schließen.
Das Programm redet mit dir, druckt seine Ausgaben an den
Terminalemulator (der sie wiederum auf den Bildschirm malt) und nichts
verschwindet plötzlich.
VT100 ist jetzt ein Satz von Steuerzeichen, die so ein Terminalemulator
verstehen kann. Leitest du die Programmausgabe einfach in eine Datei,
tauchen dort halt komische Steuerzeichen auf. Der Terminalemulator aber
filtert die heraus und stellt was Gescheites damit an (Cursor bewegen,
Farben etc.).
ncurses war jetzt für Linux, für Windows gibts gewiss auch ähnliche
Bibliotheken.
Dann gibts natürlich noch die Lösung für die ganz harten:
Einfach einen alten XPDM Grafiktreiber installieren, dann klappts zwar
mit Aero nicht mehr, dafür ist aber der Vollbildmodus wieder da.
Siehe auch: http://support.microsoft.com/kb/926657/de
Arghhh!
Peter II schrieb:> xpler schrieb:>> Jetzt ist aber gut!>> Kann mir mal jemand sagen warum das unter W7 nicht funktioniert?>> nein, bei mir geht es. Aber du verwendest ja den GCC ich vermute mal> deine Header Dateien sind zu alt.> Wo hast du die Windows-header Dateien überhaupt her, sind bei beim gcc> für windows dabei?
Dass die Headerdateien zu alt sind ist möglich.
Ich habe CodeBlocks mit integriertem minGW runtergeladen
(codeblocks-10.05mingw-setup.exe von
http://www.codeblocks.org/downloads/26), das ist "all-inclusive". Wie
ich festgestellt habe ist diese angeblich aktuelle Version allerdings
uralt, Mai 2010 bzw. Juli 2009(!) für minGW ("gcc (TDM-2 mingw32)
4.4.1"). In den Nightly Builds ist kein minGW enthalten, also hab ich
versucht das ganze nach dieser Anleitung [1] manuell zu aktualisieren.
Ich hab jeweils das aktuellste genommen was ich dort [2] gefunden habe,
die ganzen Dateien wurden nach C:\Program Files\CodeBlocks\MinGW
entpackt und alle Anfragen bezügl. des Überschreibens von Dateien
bejaht. (Die ganzen Probleme mit Zugriffsrechten und Besitz erwähne ich
mal nicht.)
GCC meldet jetzt Version 4.5.1, laut [3] ist das aber auch schon ein
knappes Jahr alt und aktuell ist 4.5.3. Verstehe ich nicht. :-(
Gebracht hat es überhaupt nichts! In der wincon.h aus
w32api-3.17-2-mingw32-dev.tar.lzma gibt es weiterhin keinen Prototypen
und der Linker beschwert sich auch noch.
> Unter windows würde ich aber auch nicht den gcc verwenden, immerhin hat> ms ja auch eine recht guten kostenlosen compieler.
Mit dem MS-Compiler und der dazugehörigen IDE habe ich so meine
Erfahrungen gemacht, das möchte ich mir eigentlich nicht antun. Außerdem
hab ich nur knappe 500MB RAM für die VM, das ist schon hart an der
Grenze. Für W7+VisualStudio reicht das bestimmt nicht, wie es mit dem
SDK aussieht weiß ich jetzt nicht. Ich will eigentlich beim GCC bleiben,
ging (bisher) immer.
Frage an die Profis die sich mit diesem ganzen GCC-Kram auskennen: Was
muss ich wo installieren um diese dämlichen Funktionen nutzen zu können?
Das kann doch nicht so kompliziert sein, dämlicher Krempel. Sorry wegen
der Flucherei, aber am Anfang wollte ich nur ein recht simples Programm
auf W7 zum Laufen kriegen und jetzt wird wieder eine Großbaustelle
draus.
[1] http://www.mingw.org/wiki/InstallationHOWTOforMinGW
[2] http://sourceforge.net/projects/mingw/files/MinGW/
[3] http://gcc.gnu.org/releases.html
xpler schrieb:> Mit dem MS-Compiler und der dazugehörigen IDE habe ich so meine> Erfahrungen gemacht, das möchte ich mir eigentlich nicht antun. Außerdem> hab ich nur knappe 500MB RAM für die VM, das ist schon hart an der> Grenze. Für W7+VisualStudio reicht das bestimmt nicht, wie es mit dem> SDK aussieht weiß ich jetzt nicht. Ich will eigentlich beim GCC bleiben,> ging (bisher) immer.
scheinbar ja nicht, du kannst nicht auf MS schimpfen und dir irgendwo
entwas herunterladen. Die Version von GCC ist ziemlich egal. Wichtig ist
das du die aktuellen header und libs hast und die bekommen man nun mal
von MS. Lade dir mal das Platform-SDK runter eventuell kann man dort
auch nur die header und libs installieren. Muss ja nicht den compiler
verwenden.
Hier mal die übersicht
http://msdn.microsoft.com/de-de/windows/ff851942.aspx
es ist immer nur der webinstaller, dort steht auch immer das man 2GB HDD
braucht. Ich glaube man konnte aber bei der installation wählen was man
alles haben will.
Kannst ja wenigstens mal das Setup starten, dann sieht du ja ob man nur
die header und libs auswählen kann. Eventuell nicht das neuste nehmen,
wegen ganzen .net zeug was dabei ist.
Das müsste die Version 6.1 sein, damit hatte ich zumindest mal gute
erfahrung gemacht.
http://www.microsoft.com/downloads/en/details.aspx?familyid=e6e1c3df-a74f-4207-8586-711ebe331cdc&displaylang=en
So, nach längerer Mittagspause gehts weiter mit der Beschreibung was ich
gemacht habe um den Testcode compilieren zu können. Als erstes das
manuelle Update auf Version 4.5.1 rückgängig gemacht (Schon toll so eine
VM!), dann das Orakel mit GetCurrentConsoleFont belästigt und diese
Seite [1] gefunden. Keine Ahnung um was es da eigentlich geht, aber es
findet sich ein Header welcher einen Prototypen für
GetCurrentConsoleFont enthält, mit folgendem Hinweis:
>Well, here's the wincon.h file in the stable 1.0 of MinGW 64
Bei Sourceforge [2] lässt sich die Datei aber nicht finden und das ist
normal - es handelt sich um ein anderes Projekt! MinGW-w64: [3]
Dort die Datei mingw-w32-1.0-bin_i686-mingw_20110516.zip [4] runterladen
(Vorsicht, 200MB!) und entpacken. Dann alle Dateien aus dem Ordner
mingw\include nach C:\Program Files\CodeBlocks\MinGW\include kopieren
(bereits vorhandene Dateien ersetzen) und es läuft.
Ich blick zwischen C::B, GCC, minGW, minGW64 usw. nicht richtig durch,
es scheint als wäre da irgendwas nicht ganz up-to-date, daher der
Fehler.
Jetzt kann ich mich endlich um das eigentliche Problem kümmern,
nämlich diese Konsole zu vergrößern!
[1] http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?p=246803
[2] http://sourceforge.net/projects/mingw/files/
[3] http://sourceforge.net/projects/mingw-w64/
[4]
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Automated%20Builds/mingw-w32-1.0-bin_i686-mingw_20110516.zip/download
Um noch kurz auf die anderen Posts einzugehen:
Sven P. schrieb:> xpler schrieb:>> Sven P. schrieb:>>> Besorg dir eine vernünftige Bibliothek für VT100 oder sowas (ncurses>>> z.B.) und schreib damit den Programm. Benutze dann einen gescheiten>>> Terminal-Emulator.>> Äh... Ich bin nur dummer Hobbyprogrammierer, langsam bitte...> Nunja, viele Programmierer haben ein völlig falsches Verständnis [...]
Danke für den ausführlichen Beitrag, ich werde in den nächsten Tagen
darauf zurückkommen!! Aktuell bastele ich mit WinAPI+GCC, ich will nicht
alles vermischen.
Theodor schrieb:> Dann gibts natürlich noch die Lösung für die ganz harten:> Einfach einen alten XPDM Grafiktreiber installieren, dann klappts zwar> mit Aero nicht mehr, dafür ist aber der Vollbildmodus wieder da.
Das ist leider nicht möglich, der PC wo die ganze Sache laufen soll
gehört nicht mir.
Peter II schrieb:> [...]
Die Header habe ich mittlerweile aus anderer Quelle bekommen (s.o.), der
Ausflug in MS's-Entwicklungstools bleibt mir also erspart. :-) Und
Webinstaller kommen mir eh nicht auf die Festplatte! Trotzdem Danke für
die Hilfe.
Sven P. schrieb:> Ein Konsolenprogramm nimmt Eingaben entgegen und erzeugt Ausgaben,> Punkt. Wo erstere herkommen und wo leztere hingehen, ist völlig wurscht.> Entsprechend erübrigen sich auch solche Hirnkrämpfe wie> 'system("pause")' und 'getch(); getch();' und anderweitige Funktionen,> um irgendwie am 'Konsolenfenster' herumzudoktorn.
Warum? Meine Programme enden fast immer mit getch(), funktioniert prima.
Da Quelle+Ziel der Daten immer gleich sind (Tastatur+Monitor) sehe ich
da irgendwie das Problem nicht.
> Oder aber du benutzt ein weiteres Hilfsprogramm, welches gewissermaßen> deine Eingabe liest, durch das Konsolenprogramm durchreicht und die> Ausgabe auffängt und anzeigt. Das ist dann ein Terminalemulator.
Demnach ist das schwarze Fenster was Windows mir bei einem Klick auf
mein Programm aufmacht nicht das eigentliche Konsolenprogramm sondern
ein Terminalemulator? Hä?
> VT100 ist jetzt ein Satz von Steuerzeichen, die so ein Terminalemulator> verstehen kann. Leitest du die Programmausgabe einfach in eine Datei,> tauchen dort halt komische Steuerzeichen auf. Der Terminalemulator aber> filtert die heraus und stellt was Gescheites damit an (Cursor bewegen,> Farben etc.).
Ja, ich habe mal danach gegoogelt. Wenn ich das richtig verstehe sind
das "nur" ein paar Zeichen die man zusätzlich ausgibt, da brauche ich im
konkreten Fall keine Library zu.
Nur: Gibt es einen brauchbaren Terminalemulator für Windows welcher
eben diese VT100-Sequenzen versteht? Ich würde da gerne mal rumspielen
aber Google findet nichts.
xpler schrieb:> Zu früh gefreut, selbes Problem mit CONSOLE_FONT_INFOEX (struct) und> SetCurrentConsoleFontEx(). Ich gebs auf. :-(
wer nicht hören will muss fühlen.
mit dem SDK würde es (vermutlich) sofort gehen.
xpler schrieb:> Warum? Meine Programme enden fast immer mit getch(), funktioniert prima.
Warum? Möchtest du immer noch ein Zeichen lesen, bevor das Programm
beendet? Sicherlich nicht.
> Da Quelle+Ziel der Daten immer gleich sind (Tastatur+Monitor) sehe ich> da irgendwie das Problem nicht.
Du liest ein Zeichen zu viel aus dem Eingabestrom, das ist schon genug.
Hast du früher mal mit DOS o.ä. gearbeitet? Dein 'getch()' ist so in
etwa, als wenn du 'dir' eintippst und Enter drückst. Es kommt dann das
Verzeichnislisting. Und jetzt musst du nochmal Enter drücken, damit
'dir' beendet und du wieder neue Befehle eintippen kannst.
>> Oder aber du benutzt ein weiteres Hilfsprogramm, welches gewissermaßen>> deine Eingabe liest, durch das Konsolenprogramm durchreicht und die>> Ausgabe auffängt und anzeigt. Das ist dann ein Terminalemulator.> Demnach ist das schwarze Fenster was Windows mir bei einem Klick auf> mein Programm aufmacht nicht das eigentliche Konsolenprogramm sondern> ein Terminalemulator? Hä?
Vollkommen korrekt. Windows startet den Emulator, bringt dein Programm
darin zur Ausführung und beendet den Emulator anschließend. Dabei geht
das Fenster wieder zu.
>> VT100 ist jetzt ein Satz von Steuerzeichen, die so ein Terminalemulator>> verstehen kann. Leitest du die Programmausgabe einfach in eine Datei,>> tauchen dort halt komische Steuerzeichen auf. Der Terminalemulator aber>> filtert die heraus und stellt was Gescheites damit an (Cursor bewegen,>> Farben etc.).> Ja, ich habe mal danach gegoogelt. Wenn ich das richtig verstehe sind> das "nur" ein paar Zeichen die man zusätzlich ausgibt, da brauche ich im> konkreten Fall keine Library zu.>> Nur: Gibt es einen brauchbaren Terminalemulator für Windows welcher> eben diese VT100-Sequenzen versteht? Ich würde da gerne mal rumspielen> aber Google findet nichts.
Gibt sicherlich tausende, PuTTY ist zum Beispiel recht populär.
Auch mit VT100 aber wirst du Probleme haben, das Bildschirmformat zu
ändern. Was ich sagen möchte ist, dass du dringend deinen Ansatz
umdenken musst: Nicht dein Programm ändert das Bildschirmformat. Viel
mehr sollte sich dein Programm an der gegebenen Bildschirmgröße
orientieren und z.B. Tabellen entsprechend kleiner/größer darstellen
oder den Zeilenumbruch anpassen. Notfalls auch abbrechen mit einer
Meldung, dass der Bilschirm zu klein ist.
Peter II schrieb:> xpler schrieb:>> Zu früh gefreut, selbes Problem mit CONSOLE_FONT_INFOEX (struct) und>> SetCurrentConsoleFontEx(). Ich gebs auf. :-(> wer nicht hören will muss fühlen.>> mit dem SDK würde es (vermutlich) sofort gehen.
Ist ja gut. Mit dem SDK könnte ich zwar wahrscheinlich die
API-Funktionen benutzen, aber nachdem was ich so an Problemen mit
VisualStudio hatte will ich mir das mindestens heute nicht mehr antun.
Außerdem weiß ich gar nicht ob die API-Funktionen mir überhaupt helfen,
irgendwie ist das (wenn überhaupt) auch nur eine Murkslösung.
Sven P. schrieb:> xpler schrieb:>> Warum? Meine Programme enden fast immer mit getch(), funktioniert prima.> Warum? Möchtest du immer noch ein Zeichen lesen, bevor das Programm> beendet? Sicherlich nicht.
Eigentlich nicht, aber das Zeichen stört mich nicht und das Fenster
bleibt offen. Ansonsten müsste man jedes Programm aus der Konsole bzw.
dem Konsolenemulator (also das Fenster was sich beim Aufruf von cmd
öffnet) heraus ausführen, nicht sehr praktisch.
> Hast du früher mal mit DOS o.ä. gearbeitet?
'dir' und Co. nutze ich heute noch ab und zu. :-)
> Dein 'getch()' ist so in> etwa, als wenn du 'dir' eintippst und Enter drückst. Es kommt dann das> Verzeichnislisting. Und jetzt musst du nochmal Enter drücken, damit> 'dir' beendet und du wieder neue Befehle eintippen kannst.
Ich will halt das Fenster offen halten, s.o.
>>> Oder aber du benutzt ein weiteres Hilfsprogramm, welches gewissermaßen>>> deine Eingabe liest, durch das Konsolenprogramm durchreicht und die>>> Ausgabe auffängt und anzeigt. Das ist dann ein Terminalemulator.>> Demnach ist das schwarze Fenster was Windows mir bei einem Klick auf>> mein Programm aufmacht nicht das eigentliche Konsolenprogramm sondern>> ein Terminalemulator? Hä?> Vollkommen korrekt. Windows startet den Emulator, bringt dein Programm> darin zur Ausführung und beendet den Emulator anschließend. Dabei geht> das Fenster wieder zu.
Okay...
> Gibt sicherlich tausende, PuTTY ist zum Beispiel recht populär.
OK, das werde ich mal runterladen.
> Was ich sagen möchte ist, dass du dringend deinen Ansatz> umdenken musst: Nicht dein Programm ändert das Bildschirmformat. Viel> mehr sollte sich dein Programm an der gegebenen Bildschirmgröße> orientieren und z.B. Tabellen entsprechend kleiner/größer darstellen> oder den Zeilenumbruch anpassen. Notfalls auch abbrechen mit einer> Meldung, dass der Bilschirm zu klein ist.
Du hast ja vollkommen recht, aber... Warum zum Teufel ist dieser ganze
Schrott so kompliziert? Mal ehrlich, ich brauche einen schwarzen
Hintergrund, weiße Buchstaben, 80x50 Zeichen und fertig. Sowas gab es
schon vor 30 Jahren, warum ist das heute so ein Krampf? Ich will doch
verflucht nochmal nur eine kleine Bastelei unter W7 zum Laufen bringen.
Da ist der Vollbildmodus verschwunden, dann kriege ich die API-Aufrufe
nicht durch den GCC, man braucht einen Konsolenemulator, das ist aber
auch wieder keine gute Lösung und und und. Hallo????
getch() und Co. mögen noch so großer Murks sein, aber es ist die
einfachste Methode die funktioniert und mehr soll es nicht . Ich will
Programme schreiben und Probleme lösen und mich nicht mit irgendwelchen
Eigenheiten von irgendwelchen Betriebssystemen und weiß der Teufel
beschäftigen. Es kann doch nicht sein das jede Kleinigkeit immer in eine
tierische Frickelei ausartet. Da gibt es hochkomplexe Computersysteme
die sonstewas berechnen und simulieren können, man kann die halbe Welt
mit 5000x5000 Pixeln und 100FPS nachbauen aber ein simples Fenster mit
80x50 Zeichen S/W wird zum Problem?
Meine Fresse, ich glaub wir sind in der Steinzeit. Irgendwie fühle ich
mich gerade ganz doof. :-(
Sorry, mir platzt gerade der Kragen. Nehmt es nicht persönlich. Zig
Stunden Gebastel für so ein einfaches Problem, solche Sachen vertrage
ich nicht. Wenn es eine Demo von XP geben würde würde ich dem DAU (per
Fernwartung) Virtualbox auf den Rechner packen und gut ist!
xpler schrieb:> was ich so an Problemen mit> VisualStudio hatte will ich mir das mindestens heute nicht mehr antun.
Wieso? Mit VsualStudio ist das nicht mehr als ein Dreizeiler.
Tina schrieb:> xpler schrieb:>> aber ein simples Fenster mit>> 80x50 Zeichen S/W wird zum Problem?>> Nö. Das Problem ist deine Herangehensweise.
Ach machs doch besser! plonk
xpler schrieb:> Tina schrieb:>> xpler schrieb:>>> aber ein simples Fenster mit>>> 80x50 Zeichen S/W wird zum Problem?>>>> Nö. Das Problem ist deine Herangehensweise.> Ach machs doch besser! *plonk*
Naja, ganz Unrecht hat sie ja nicht. Warum machst du dir so einen Krampf
darum, auf Biegen und Brechen irgendwelche Fenster offen zu halten oder
gar deren Größe zu verändern?
Kümmer dich doch ganz um dein Programm. Frag zu Beginn die aktuelle
Konsolengröße ab und arbeite dann damit oder brech das Programm ab,
falls sie zu klein ist.
Wie du dann für eine geeignete Konsole sorgst, ist erstmal zweitrangig.
Dein Programm aber steht solide und braucht sich nicht um solchen
Firlefanz zu kümmern.
Schlimmstenfalls legst du halt so ein Verknüpfungs-PIF-Dingens an und
stellst vorher alles richtig ein.
Wass das Vollbild angeht: Naja, that's Windows.
Um diese unerfreuliche Sache abzuschließen:
Sven P. schrieb:> Kümmer dich doch ganz um dein Programm. Frag zu Beginn die aktuelle> Konsolengröße ab und arbeite dann damit oder brech das Programm ab,> falls sie zu klein ist.
Davon hab ich nichts wenn ein DAU nicht die Größe (in Zeichen) passend
einstellen kann. Davon abgesehen: Die Größe IN ZEICHEN kann ich
problemlos mittels API-Aufruf ändern. Da es unter W7 aber keinen
Vollbildmodus mehr gibt ist das Ergebnis halt nicht bildschirmfüllend.
Um das Fenster größer (also mehr Pixel) zu machen wollte ich die
Schriftgröße ändern und das geht nicht.
Anyway: Das Projekt (bzw. die Projekte, es sind mindestens zwei)
ist/sind erstmal gestorben, ob für immer oder nur für längere Zeit wird
sich zeigen. Ich hab aktuell echt keine Lust mich damit rumzuschlagen.
Schade drum. :-(
Trotzdem Danke für die Hilfe...
xpler schrieb:> Da es unter W7 aber keinen> Vollbildmodus mehr gibt
Ach. Alle Spiele laufen dann seit Windows 7 in Fenstern?
Klar gibts nen Vollbildmodus; du musst halt DirectX benutzen.
Das deine Kenntnisse nicht ausreichen um ihn zu benutzen bedeutet noch
lange nicht das es keinen Vollbildmodus mehr gibt.
Rufus Τ. Firefly schrieb:> Es geht um den Textmodus, den gibt es nicht mehr.
Das wurde ja wohl hier schon oft genug gesagt.
Hier geht es um die Aussage:
xpler schrieb:> Da es unter W7 aber keinen> Vollbildmodus mehr gibt
welche schlicht und einfach falsch ist.
Textmodus != Vollbildmodus.
Textausgabe im Vollbildmodus, gibt es natürlich mit DirectX. Ist fast so
einfach und sieht auch genauso aus wie die alte DOS-Konsole.
Whaaaa!
Moin,
ich grabe die Leiche nochmal aus.
Gesucht wird irgendwas (Programm, Library, C-Code oder weißderteufel)
was mir unter Windows XP und Windows7 ein "Vollbilddosfenster" erzeugt.
Ich brauche nur eine fixe Größe, eine Funktion "male Zeichen an Position
xy" und sonst nichts. Die Details sind egal, hauptsache das ganze ist
EINFACH!
Meine Versuche aus GTK was passendes zu basteln sind hiermit beendet,
das Dingen ist so umfangreich dass man wahnsinnig wird.
xpler schrieb:> Ich brauche nur eine fixe Größe, eine Funktion "male Zeichen an Position> xy" und sonst nichts.
dann mach doch einfach ein schwarzen vollbild fenster und zeichen die
Zeichen mit den normalen Windows funktionnen.
Peter II schrieb:> xpler schrieb:>> Ich brauche nur eine fixe Größe, eine Funktion "male Zeichen an Position>> xy" und sonst nichts.> dann mach doch einfach ein schwarzen vollbild fenster und zeichen die> Zeichen mit den normalen Windows funktionnen.
Das ist leider alles andere als "einfach"...
Rufus Τ. Firefly schrieb:> Sieh Dir mal das hier näher an:> http://sourceforge.net/projects/console/
Das sieht schon ziemlich gut aus, leider stürzt 5 Sekunden nachdem ich
mein Programm gestartet habe cmd.exe ab, reproduzierbar unter XP und
7... Wenn ich das Programm unter XP direkt starte funktioniert alles
prima.
Schade! Danke trotzdem.
xpler schrieb:> cmd.exe
wahlweise auch console.exe wie ich gerade feststelle. Offensichtlich mag
das Dingen es nicht wenn man den Buffer umschaltet
(SetConsoleActiveScreenBuffer()). Könnte aber auch was anderes sein, nur
kurz angetestet.
Verzeihung, du bist aber auch verdammt schwer von Begriff.
1. Was ist denn so schwer daran das Platform SDK herunterzuladen? Nur
weil es von Microsoft ist? Das ist dein Betriebssystem auch! Das PSDK
hat nichts mit Visual Studio zu tun, sondern ist nur eine Ansammlung von
Headern/Libs und noch ein wenig Kleinkram.
2. Hier haben mehrere Leute erklärt, was eine Konsole ist, was sie kann
und was sie nicht können muss. Auch wenn Windows diese Features durch
die Windows-API etwas erweitert, ist und bleibt die Konsole eine
Konsole. Wie schon erwähnt gibt es nur Eingabe- und Ausgabestreams. So
ein Konsolenprogramm muss nicht an dieses schwarze Fensterchen mit
weißer Schrift gebunden sein, sondern kann von anderen Anwendungen
angesprochen werden. Da werden dann Ein- & Ausgabestreams in den
Speicher oder sonstwas umgeleitet.
So kann man beispielsweise eine Software mit GUI machen, die ein
Textfenster besitzt, wo ein Konsolenprogramm drin gestartet werden kann,
dessen Text-Output wieder in das Textfenster gelangt. Ganz ohne
schwarzes Fenster mit weißer Schrift!
3. Ist es heutzutage einfacher denn je eine Software mit grafischer
Oberfläche zu erstellen. Schau dir beispielsweise QT an. Da gibt es
sogar eine extrem einfach gehaltene IDE von Nokia (QT Creator), die out
of the box funktioniert. Ohne Rumgebastel an der Windows API.
Bei der GUI Applikation klickt man dann oben auf das Vollbild-Symbol und
ist damit sogar auf dem neuesten Stand der Technik!
xpler schrieb:> 1k LOC
Hauptsache man hat die Script-Kiddy Abkürzungen drauf, nech?
Schmunzeln muß: Schade dass der Thread so alt ist, ich glaube ich hätte
für xpler DIE Lösung (da er ja scheinbar keine Windowsprogramme erzeugen
mag )...