How to check ymax and xmax in a console window, under Windows, using plain c?
There is this piece of code for linux:
#include <stdio.h>
#include <sys/ioctl.h>
int main (void)
{
struct winsize max;
ioctl(0, TIOCGWINSZ , &max);
printf ("lines %d\n", max.ws_row);
printf ("columns %d\n", max.ws_col);
}
Now I wonder how can I do the same for windows. I tried winioctl.h
but it does not define struct winsize
nor any other with a similar name.
Any tips? Thanks.
PS. In linux you also can find the console size using getenv("LINES");
. Is there a similar variable under windows?
PPS. Also, there is always ncurses.h
, that I suppose work both systems, but I'm avoiding it because of conflicts with other libraries I have.
PPPS. This question here Getting terminal width in C? has a lot of tips, so no need to repeat that.
This prints the size of the console, not the buffer:
#include <windows.h>
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;
}
This code works because srWindow
"contains the console screen buffer coordinates of the upper-left and lower-right corners of the display window", and the SMALL_RECT
structure "specify the rows and columns of screen-buffer character cells" according to MSDN. I subtracted the parallel sides to get the size of the console window. Since I got 1
less than the actual value, I added one.