Obtenir la taille du terminal en c pour Windows?

Comment vérifier ymax et xmax dans une fenêtre de console, sous Windows, avec plain c?

Il y a ce morceau de code pour Linux:

#include  #include  int main (void) { struct winsize max; ioctl(0, TIOCGWINSZ , &max); printf ("lines %d\n", max.ws_row); printf ("columns %d\n", max.ws_col); } 

Maintenant, je me demande comment puis-je faire la même chose pour Windows. J’ai essayé winioctl.h mais il ne définit pas struct winsize ni aucun autre avec un nom similaire.

Des conseils? Merci.

PS Sous Linux, vous pouvez également trouver la taille de la console en utilisant getenv("LINES"); . Existe-t-il une variable similaire sous Windows?

PPS. De plus, il y a toujours ncurses.h , je suppose que cela fonctionne avec les deux systèmes, mais je l’évite à cause de conflits avec d’autres bibliothèques que j’ai.

PPPS. Cette question ici Obtenir la largeur du terminal en C? a beaucoup de conseils, donc pas besoin de répéter cela.

    Ceci affiche la taille de la console, pas le tampon:

     #include  int main(int argc, char *argv[]) { CONSOLE_SCREEN_BUFFER_INFO csbi; int columns, rows; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); columns = csbi.srWindow.Right - csbi.srWindow.Left + 1; rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; printf("columns: %d\n", columns); printf("rows: %d\n", rows); return 0; } 

    Ce code fonctionne parce que srWindow “contient les coordonnées de tampon d’écran de la console des coins supérieur gauche et inférieur droit de la fenêtre d’affichage” et que la structure SMALL_RECT “spécifie les lignes et les colonnes de cellules de caractères de tampon d’écran” selon MSDN. J’ai soustrait les côtés parallèles pour obtenir la taille de la fenêtre de la console. Comme j’en ai eu 1 moins que la valeur réelle, j’en ai ajouté un.

    (Réponse partielle)

    Ce code:

     CONSOLE_SCREEN_BUFFER_INFO csbi; int ret; ret = GetConsoleScreenBufferInfo(GetStdHandle( STD_OUTPUT_HANDLE ),&csbi); if(ret) { printf("Console Buffer Width: %d\n", csbi.dwSize.X); printf("Console Buffer Height: %d\n", csbi.dwSize.Y); } 

    Donne la taille du tampon. Le seul problème est que dwSize.Y n’est pas vraiment la taille de l’écran (300 ici au lieu de 25 lignes). Mais dwSize.X correspond au numéro de la colonne. Ne nécessite que windows.h pour fonctionner.

    Les deux fonctions ci-dessous auront un peu plus directement la taille de la fenêtre.

    Notez que j’ai constaté, à l’aide de gcc, que ni cette approche ni GetConsoleScreenBufferInfo ne fonctionnaient si le programme était acheminé. C’est un peu pénible, car / f ne fonctionne pas non plus. Apparemment, les données d’écran ne sont pas disponibles dans un tuyau.

    Euh, la remarque ci-dessus est bien sûr énormément stupide. 😉 C’est STDOUT qui n’est pas l’écran dans un tuyau! Cela signifie que je préfère utiliser STD_ERROR_HANDLE au-dessus de STD_OUTPUT_HANDLE. Je suis beaucoup moins susceptible de détourner l’erreur standard de l’écran que la sortie standard.

     typedef struct _CONSOLE_FONT_INFO { DWORD nFont; COORD dwFontSize; } CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO; BOOL WINAPI GetCurrentConsoleFont( HANDLE hConsoleOutput, BOOL bMaximumWindow, PCONSOLE_FONT_INFO lpConsoleCurrentFont ); /* Get the window width */ int getww_(void) { CONSOLE_FONT_INFO info; GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &info); return info.dwFontSize.X; } /* Get the window height */ int getwh_(void) { CONSOLE_FONT_INFO info; GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &info); return info.dwFontSize.Y; }