Taille fenêtre console en C
Fermé
MrSteinfeld
-
6 janv. 2022 à 21:35
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 12 janv. 2022 à 11:02
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 12 janv. 2022 à 11:02
A voir également:
- Taille fenêtre console en C
- Comment réduire la taille d'un fichier - Guide
- Reduire taille photo - Guide
- Fenêtre hors écran windows 11 - Guide
- Console action - Accueil - Jeu vidéo
- Raccourci agrandir fenetre - Guide
2 réponses
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 7 janv. 2022 à 00:04
Modifié le 7 janv. 2022 à 00:04
Salut MrSteinfeld,
SetWindowPos() sert à positionner une fenêtre d'une application graphique Windows.
Pour agir sur la fenêtre de terminal CMD.exe, tu as des fonctions spécifiques dans l'API Windows.
La fonction SetConsoleWindowInfo() :
https://docs.microsoft.com/en-us/windows/console/setconsolewindowinfo
Pour l'utiliser, ce n'est pas une mince affaire. Il faut :
Cela donne ceci :
(code testé sous un Windows 10 avec le MinGW fournit par Codeblocks)
Sinon, dans la documentation actuelle de Microsoft l'utilisation de SetConsoleWindowInfo() est désormais découragée par eux (même s'ils indiquent qu'ils continuent à la supporter pour l'avenir) et ils suggèrent l'utilisation des séquences d'échappement (qui ne fonctionnent toutefois que sur les systèmes récents Windows 10 qui les supportent).
https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#window-width
SetConsoleWindowInfo() est supportée depuis Windows 2000 :-)
Dal
SetWindowPos() sert à positionner une fenêtre d'une application graphique Windows.
Pour agir sur la fenêtre de terminal CMD.exe, tu as des fonctions spécifiques dans l'API Windows.
La fonction SetConsoleWindowInfo() :
https://docs.microsoft.com/en-us/windows/console/setconsolewindowinfo
Pour l'utiliser, ce n'est pas une mince affaire. Il faut :
- obtenir un handle sur la fenêtre CMD.exe
- obtenir un handle sur la sortie standard
- obtenir la taille maximale taille pour la plus grande fenêtre de console possible, en fonction de la police actuelle et de la taille de l’affichage
- modifier la taille de la mémoire tampon d’écran de la console CMD sur laquelle tu travailles
- réactiver la fenêtre de la console CMD en demandant au système de la maximiser
Cela donne ceci :
#include <stdio.h> #include <windows.h> int main(void) { printf("Veuillez presser Enter\n"); getchar(); HWND console_window = GetConsoleWindow(); if (!console_window) { printf("GetConsoleWindow() failed\n"); return EXIT_FAILURE; } HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); if (handle_out == INVALID_HANDLE_VALUE) return GetLastError(); COORD largest_size = GetLargestConsoleWindowSize(handle_out); if (!largest_size.X && !largest_size.Y) return GetLastError(); largest_size.X--; largest_size.Y--; if (!SetConsoleScreenBufferSize(handle_out, largest_size)) { return GetLastError(); } if (!ShowWindow(console_window, SW_MAXIMIZE)) { printf("ShowWindow() failed\n"); return EXIT_FAILURE; } printf("Ce programme continue maintenant dans la fenetre de terminal " "la plus large possible\n"); printf("Veuillez presser Enter pour terminer ce magnifique programme\n"); getchar(); return 0; }
(code testé sous un Windows 10 avec le MinGW fournit par Codeblocks)
Sinon, dans la documentation actuelle de Microsoft l'utilisation de SetConsoleWindowInfo() est désormais découragée par eux (même s'ils indiquent qu'ils continuent à la supporter pour l'avenir) et ils suggèrent l'utilisation des séquences d'échappement (qui ne fonctionnent toutefois que sur les systèmes récents Windows 10 qui les supportent).
https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#window-width
SetConsoleWindowInfo() est supportée depuis Windows 2000 :-)
Dal
Michel_pc4
Messages postés
5
Date d'inscription
samedi 1 janvier 2022
Statut
Membre
Dernière intervention
11 janvier 2022
11 janv. 2022 à 14:36
11 janv. 2022 à 14:36
Bonjour,
je cherche aussi un peu la même chose.
Je suis sous Linux Mint 20.1, je développe
sous Code::Blocks 20.3.
Actuellement, je pense contourner le problème
en installant un "timer" de 5 secondes pour me
donner le temps d'agrandir celle-ci et ainsi de rafraichir
l'écran.
C'est un peu ce que je fais d'ailleurs dans ma version de 80X24.
Toutefois, je cherche quand même une solution plus élégante.
Je me connecte donc sur ton fils, si je trouve, si quelqu'un connaît la solution ...
J'utilise le gotoxy(x,y) pour lire/écrire à l'écran.
Michel.
je cherche aussi un peu la même chose.
Je suis sous Linux Mint 20.1, je développe
sous Code::Blocks 20.3.
Actuellement, je pense contourner le problème
en installant un "timer" de 5 secondes pour me
donner le temps d'agrandir celle-ci et ainsi de rafraichir
l'écran.
C'est un peu ce que je fais d'ailleurs dans ma version de 80X24.
Toutefois, je cherche quand même une solution plus élégante.
Je me connecte donc sur ton fils, si je trouve, si quelqu'un connaît la solution ...
J'utilise le gotoxy(x,y) pour lire/écrire à l'écran.
Michel.
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 12 janv. 2022 à 11:08
Modifié le 12 janv. 2022 à 11:08
Salut Michel_pc4,
1.
Sous Linux, selon les terminaux que tu vas utiliser, les séquences d'échappement AINSI concernées peuvent fonctionner ou non.
Est sensée maximiser la fenêtre.
Est sensée fixer la hauteur à 48 caractères et la largeur à 179.
Cependant, ce type de séquences de manipulation de la fenêtre sont rarement supportées par les terminaux virtuels, par exemple gnome-terminal sous Debian ne fait rien (je crois que c'est un également un terminal basé sur gnome-terminal qui est celui par défaut sur Mint, mais je ne suis pas sûr). Par contre, d'autres séquences CSI peuvent être supportées, par exemple, celles permettant de changer les couleurs d'écriture :
mais aussi celles permettant de déplacer le curseur à des coordonnées (peut-être ta fonction gotoxy() à laquelle tu fais allusion les utilises-t-elles), d'effacer l'écran, etc.
2.
Les terminaux virtuels gèrent en général leurs propres paramètres et permettent à l'utilisateur de changer la taille de la fenêtre par différents procédés. Dans le cas de gnome-terminal sous Debian, tu peux gérer plusieurs profils, chacun ayant des préférences particulières.
Par exemple, gnome-terminal sous Debian permet de spécifier que l'on veut le démarrer sous forme maximisée et en exécutant un programme donné :
Dans un terminal, tape
Dal
1.
Sous Linux, selon les terminaux que tu vas utiliser, les séquences d'échappement AINSI concernées peuvent fonctionner ou non.
printf("\x1b[9;1;t");
Est sensée maximiser la fenêtre.
printf("\x1B[8;48;179t");
Est sensée fixer la hauteur à 48 caractères et la largeur à 179.
Cependant, ce type de séquences de manipulation de la fenêtre sont rarement supportées par les terminaux virtuels, par exemple gnome-terminal sous Debian ne fait rien (je crois que c'est un également un terminal basé sur gnome-terminal qui est celui par défaut sur Mint, mais je ne suis pas sûr). Par contre, d'autres séquences CSI peuvent être supportées, par exemple, celles permettant de changer les couleurs d'écriture :
printf("\x1b[104;93m"); printf("Colored text\n"); printf("\x1b[0m");
mais aussi celles permettant de déplacer le curseur à des coordonnées (peut-être ta fonction gotoxy() à laquelle tu fais allusion les utilises-t-elles), d'effacer l'écran, etc.
2.
Les terminaux virtuels gèrent en général leurs propres paramètres et permettent à l'utilisateur de changer la taille de la fenêtre par différents procédés. Dans le cas de gnome-terminal sous Debian, tu peux gérer plusieurs profils, chacun ayant des préférences particulières.
Par exemple, gnome-terminal sous Debian permet de spécifier que l'on veut le démarrer sous forme maximisée et en exécutant un programme donné :
gnome-terminal --quiet --maximize -- /usr/bin/links www.commentcamarche.net
Dans un terminal, tape
gnome-terminal --helpou le nom de ton gestionnaire de terminal virtuel suivit de
--helppour connaître ses options éventuelles de lancement.
Dal