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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With