Форум программистов, компьютерный форум, киберфорум
fair7
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Как узнать размер шрифта в консоли?

Запись от fair7 размещена 08.03.2020 в 20:35
Показов 3538 Комментарии 7

Не найдя функции, которая узнаёт размер шрифта консоли - решил написать программку,
которая вычислит шрифт (какой в данный момент):
От ХР до 8.1 работает; а в windows 10 не работает
Название: Узнать размер шрифта в консоли.PNG
Просмотров: 1077

Размер: 1.3 Кб
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#define _WIN32_WINNT 0x0500 // Должна быть перед <windows.h>
#include <windows.h>
#include <stdio.h>
#define PP printf //  чтобы легче писать
typedef struct  {short X;short Y;} C00RD, *PC00RD;
// Дескриптор консоли, обязательно надо инициализировать
HANDLE hOut =  GetStdHandle( STD_OUTPUT_HANDLE );
CONSOLE_SCREEN_BUFFER_INFO csbInfo;
void GetBufferChars(COORD *Chars)// Чтобы узнать размер буфера символов
{   GetConsoleScreenBufferInfo(hOut, &csbInfo);
    Chars->X = csbInfo.srWindow.Right - csbInfo.srWindow.Left + 1;
    Chars->Y = csbInfo.srWindow.Bottom - csbInfo.srWindow.Top + 1;
}
int main()
{
    COORD Chars={0};// Сколько символов помещается на экран
    unsigned short width=0,height=0;
    unsigned char width_pixel=0,height_pixel=0;
    while (1)
    {
        GetBufferChars(&Chars);// Взять размер буфера экрана
        RECT rect = {0},client={0};
        GetWindowRect( GetConsoleWindow() , &rect);
        GetClientRect( GetConsoleWindow(),&client);
        system("cls");
        width=client.right-client.left;
        height=client.bottom-client.top;
        PP("\n client: %3i x %3i",width,height);
        PP("\n Chars:  %3i x %3i",Chars.Y,Chars.X);
        height_pixel=height/Chars.Y;
        width_pixel=width/Chars.X;
        PP("\n type of letters: %2i x %2i",width_pixel,height_pixel);
        Sleep(55);// чтобы процессор меньше нагружать :)
    }
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 7
Комментарии
  1. Старый комментарий
    Аватар для Croessmah
    GetCurrentConsoleFont с GetConsoleFontSize чем не устроили?
    Запись от Croessmah размещена 08.03.2020 в 22:14 Croessmah вне форума
  2. Старый комментарий
    Аватар для fair7
    А где их взять эти функции,
    Code Block 13.12 их в "windows.h" не видет?
    Запись от fair7 размещена 08.03.2020 в 22:22 fair7 вне форума
  3. Старый комментарий
    Аватар для Croessmah
    емнип, они доступны, начиная с Windows XP.
    C++
    1
    
    #define _WIN32_WINNT 0x0500
    0x500 - это Windows 2000.

    Таблица значений: https://docs.microsoft.com/ru-... ew=vs-2019
    Запись от Croessmah размещена 08.03.2020 в 22:53 Croessmah вне форума
  4. Старый комментарий
    Аватар для fair7
    У вас получаться использовать GetConsoleFontSize и GetCurrentConsoleFont
    я накидал такой код:
    C++
    1
    2
    3
    4
    5
    6
    7
    
    #define _WIN32_WINNT_WINXP 0x0501 // Windows XP
    #include <windows.h>
    int main()
    {
        GetConsoleFontSize();GetCurrentConsoleFont();
        return 0;
    }
    но компилятор не видет такие функции.
    Запись от fair7 размещена 09.03.2020 в 14:59 fair7 вне форума
  5. Старый комментарий
    Аватар для Croessmah
    Цитата Сообщение от fair7
    я накидал такой код
    Для VS:
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    #include <Windows.h>
    #include <iostream>
     
    int main()
    {
        CONSOLE_FONT_INFO fontInfo;
        if (!GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), false, &fontInfo)) {
            return EXIT_FAILURE;
        }
        std::cout << "character geometry: " << fontInfo.dwFontSize.X << "x" << fontInfo.dwFontSize.Y;
    }
    Возможно, у вас на MinGW заголовок не полный. Можно сделать так:
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    #include <Windows.h>
    #include <iostream>
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    //__attribute((dllimport, stdcall)) 
    BOOL WINAPI GetCurrentConsoleFont(HANDLE hConsoleOutput, BOOL bMaximumWindow, PCONSOLE_FONT_INFO lpConsoleCurrentFont);
     
    #ifdef __cplusplus
    }
    #endif
     
    int main()
    {
        CONSOLE_FONT_INFO fontInfo;
        if (!GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), false, &fontInfo)) {
            return EXIT_FAILURE;
        }
        std::cout << "character geometry: " << fontInfo.dwFontSize.X << "x" << fontInfo.dwFontSize.Y;
    }
    Запись от Croessmah размещена 09.03.2020 в 21:22 Croessmah вне форума
  6. Старый комментарий
    Аватар для fair7
    эта программа показывает размер буфера в символах, а как размер символа показать?
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    #include <Windows.h>
    #include <stdio.h>
    #define PP printf
    #ifdef __cplusplus
    extern "C"
    {
    #endif
    //__attribute((dllimport, stdcall))
    BOOL WINAPI GetCurrentConsoleFont(HANDLE hConsoleOutput, BOOL bMaximumWindow, PCONSOLE_FONT_INFO lpConsoleCurrentFont);
     
    #ifdef __cplusplus
    }
    #endif
     
    int main()
    {
        CONSOLE_FONT_INFO fontInfo;
        GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), false, &fontInfo);
        PP("character geometry: %i",fontInfo.dwFontSize.X),PP("x %i\n",fontInfo.dwFontSize.Y);
        GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), true, &fontInfo);
        PP("character geometry: %i",fontInfo.dwFontSize.X),PP("x %i\n",fontInfo.dwFontSize.Y);
        system("pause");
    }
    ещё
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    #include <stdio.h>
    #include <windows.h>
    #define PP printf
     
    CONSOLE_SCREEN_BUFFER_INFO csbiData;
     
    int main()
    {
        DWORD dwWidht, dwHeightWnd, dwHeightBuf, dwErrCode;
        CHAR* szSysMsg = NULL; //LPTSTR lpszSysMsg = NULL;
        BOOL bRet;
        HANDLE hWndCon = GetStdHandle(STD_OUTPUT_HANDLE);
        if (FALSE != hWndCon)GetConsoleScreenBufferInfo(hWndCon, &csbiData);
     
        dwWidht = csbiData.dwSize.X; // Ширина буфера / окна
        dwHeightBuf = csbiData.dwSize.Y; // Высота буфера
        dwHeightWnd = csbiData.srWindow.Bottom + 1; // Высота окна
        PP(" Size: %i",dwHeightWnd),PP(" (%i",dwHeightBuf),PP(") x %i",dwWidht),PP(" symbols\n");
     
        system("pause");
        return EXIT_SUCCESS;
    }
    Запись от fair7 размещена 10.03.2020 в 21:50 fair7 вне форума
  7. Старый комментарий
    Аватар для fair7
    я нашёл в документации
    C++
    1
    2
    3
    4
    
    COORD WINAPI GetConsoleFontSize(
      _In_ HANDLE hConsoleOutput,
      _In_ DWORD  nFont
    );
    но как этим воспользоваться??
    Запись от fair7 размещена 10.03.2020 в 22:27 fair7 вне форума
 
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru