Подтвердить что ты не робот

Можно получить/установить размер шрифта консоли в С#.net?

Я видел сообщения об изменении шрифта шрифта консоли, цвета консоли (rgb), но ничего не установил или не получил размер шрифта консоли. edit: reason = grid выводится на консоль, сетка имеет много столбцов, лучше подходит для меньшего шрифта, задаваясь вопросом, можно ли изменить во время выполнения, а не позволять шрифтам по умолчанию или настроенным приоритетам/переопределять наследование.

4b9b3361

Ответ 1

Может быть, эта статья поможет вам

ConsoleHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;

namespace ConsoleExtender {
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct ConsoleFont {
        public uint Index;
        public short SizeX, SizeY;
    }

    public static class ConsoleHelper {
        [DllImport("kernel32")]
        public static extern bool SetConsoleIcon(IntPtr hIcon);

        public static bool SetConsoleIcon(Icon icon) {
            return SetConsoleIcon(icon.Handle);
        }

        [DllImport("kernel32")]
        private extern static bool SetConsoleFont(IntPtr hOutput, uint index);

        private enum StdHandle {
            OutputHandle = -11
        }

        [DllImport("kernel32")]
        private static extern IntPtr GetStdHandle(StdHandle index);

        public static bool SetConsoleFont(uint index) {
            return SetConsoleFont(GetStdHandle(StdHandle.OutputHandle), index);
        }

        [DllImport("kernel32")]
        private static extern bool GetConsoleFontInfo(IntPtr hOutput, [MarshalAs(UnmanagedType.Bool)]bool bMaximize, 
            uint count, [MarshalAs(UnmanagedType.LPArray), Out] ConsoleFont[] fonts);

        [DllImport("kernel32")]
        private static extern uint GetNumberOfConsoleFonts();

        public static uint ConsoleFontsCount {
            get {
                return GetNumberOfConsoleFonts();
            }
        }

        public static ConsoleFont[] ConsoleFonts {
            get {
                ConsoleFont[] fonts = new ConsoleFont[GetNumberOfConsoleFonts()];
                if(fonts.Length > 0)
                    GetConsoleFontInfo(GetStdHandle(StdHandle.OutputHandle), false, (uint)fonts.Length, fonts);
                return fonts;
            }
        }

    }
}

Вот как использовать его для отображения шрифтов истинного типа для консоли,

static void Main(string[] args) {
   var fonts = ConsoleHelper.ConsoleFonts;
   for(int f = 0; f < fonts.Length; f++)
      Console.WriteLine("{0}: X={1}, Y={2}",
         fonts[f].Index, fonts[f].SizeX, fonts[f].SizeY);

   ConsoleHelper.SetConsoleFont(5);
   ConsoleHelper.SetConsoleIcon(SystemIcons.Information);
}

SetConsoleFont функции: SetConsoleFont, GetConsoleFontInfo и GetNumberOfConsoleFonts. Они без документов, поэтому используйте на свой страх и риск.

Ответ 2

Консоль не поддерживает изменение размера шрифта во время выполнения. Список доступных методов для изменения текущих настроек окна консоли можно найти в MSDN. Я понимаю, что это происходит потому, что:

  • Консоль не является богатым текстовым интерфейсом, то есть не может отображать несколько шрифтов или размер шрифта.
  • как утверждает Нолдорин, это то, что должно быть до пользователя, например, человек с проблемами зрения может выбрать для большого шрифта.