Получение размера терминала в c для окон?

Как проверить ymax и xmax в окне консоли под Windows, используя простой c?

Это код для 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); } 

Теперь мне интересно, как я могу сделать то же самое для Windows. Я попробовал winioctl.h но он не определяет struct winsize и другие с похожим именем.

Какие-нибудь советы? Благодарю.

PS. В linux вы также можете найти размер консоли с помощью getenv("LINES"); , Есть ли подобная переменная под windowsми?

PPS. Кроме того, всегда есть ncurses.h , я полагаю, что работаю обе системы, но я избегаю этого из-за конфликтов с другими библиотеками, которые у меня есть.

PPPS. Этот вопрос здесь Получение терминальной ширины в C? имеет много советов, поэтому не нужно повторять это.

Это печатает размер консоли, а не буфер:

 #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; } 

Этот код работает, потому что srWindow «содержит координаты буфера экрана консоли в верхнем левом и нижнем правом углах windows дисплея», а структура SMALL_RECT «задает строки и столбцы ячеек символов экранного буфера» в соответствии с MSDN. Я вычитал параллельные стороны, чтобы получить размер windows консоли. Поскольку я получил 1 меньше фактического значения, я добавил один.

(Частичный ответ)

Этот код:

 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); } в 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); } 

Дает размер буфера. Единственная проблема заключается в том, что dwSize.Y самом деле не является размером экрана (здесь 300 вместо 25 строк). Но dwSize.X соответствует dwSize.X столбца. windows.h работать только с windows.h .

Ниже две функции получат размер windows несколько более прямо.

Обратите внимание, что я нашел, используя gcc, что ни этот подход, ни GetConsoleScreenBufferInfo не работают, если программа передана по каналам. Это немного больно, так как для f f тоже не работает. По-видимому, данные экрана недоступны в трубе.

Разумеется, вышеупомянутое замечание, конечно, чрезвычайно глупо. 😉 Это STDOUT, это не экран в трубе! Это означает, что я предпочитаю использовать STD_ERROR_HANDLE над STD_OUTPUT_HANDLE. У меня гораздо меньше шансов направить стандартную ошибку от экрана, чем стандартный вывод.

 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; } 
  • Сколько данных может содержать список максимум?
  • Array vs Array - Инициализация массива с переменным vs действительным числом
  • где найти значение XSS по умолчанию для Sun / Oracle JVM?
  • В C, почему sizeof (char) 1, когда 'a' является int?
  • Загрузить значение измерения из res / values ​​/ dimension.xml из исходного кода
  • Размер пустых пакетов UDP и TCP?
  • Размер массива (длина) в C #
  • Почему размер моего приложения на устройстве отличается от размера APK или Play Store
  • Как работает эта функция шаблона «размер массива»?
  • Есть ли причина не использовать целые типы фиксированной ширины (например, uint8_t)?
  • Почему имена таблиц / столбцов / индексов Oracle ограничены 30 символами?
  • Interesting Posts

    Ошибка bcdedit / deletevalue safeboot

    Работает ли jQuery.on () для элементов, которые добавляются после создания обработчика событий?

    Что более вредно для процессора? Высокая нагрузка или высокая температура?

    Как напечатать полное значение длинной строки в gdb?

    Мне сказали принять одну ошибку с Memtest86 +

    Триггер MySQL Включение / обновление событий

    Почему абстрактный class, реализующий интерфейс, может пропустить объявление / реализацию одного из методов интерфейса?

    Пользовательские сочетания клавиш с одним ключом в Outlook 2010 или 2013?

    Проводник не обновляется автоматически

    Что такое ::: в локальном адресе вывода netstat?

    Ширина столбца CView ListView Auto

    Настройка Spring Security 3.x для создания нескольких точек входа

    Доступ к элементам управления, созданным динамически (c #)

    Что такое левое-дочернее, правое-единственное представление дерева? Зачем вы его используете?

    Перемещение файла app.config на пользовательский путь

    Давайте будем гением компьютера.