GetCurrentConsoleFontEx (kernel32)
Last changed: matistjati@outlook.com-90.144.199.50

.
Summary
TODO - a short description

C# Signature:

    [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    extern static bool GetCurrentConsoleFontEx(
    IntPtr hConsoleOutput,
    bool bMaximumWindow,
    ref CONSOLE_FONT_INFOEX lpConsoleCurrentFont);

VB Signature:

Declare Function GetCurrentConsoleFontEx Lib "kernel32.dll" (TODO) As TODO

User-Defined Types:

C#

    [StructLayout(LayoutKind.Sequential)]
    private struct COORD
    {
        public short X;
        public short Y;

        public COORD(short x, short y)
        {
        X = x;
        Y = y;
        }
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    private struct CONSOLE_FONT_INFOEX
    {
        public uint cbSize;
        public uint nFont;
        public COORD dwFontSize;
        public int FontFamily;
        public int FontWeight;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string FaceName;
    }

You MUST set cbSize with Marshal.SizeOf using the instance of CONSOLE_FONT_INFO_EX.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

Minimum supported client: Windows Vista

Tips & Tricks:

Please add some!

Sample Code:

using System.Runtime.InteropServices;
using System;

namespace Win32test
{
    class ConsoleTest
    {
    [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    extern static bool GetCurrentConsoleFontEx(
        IntPtr hConsoleOutput,
        bool bMaximumWindow,
        ref CONSOLE_FONT_INFOEX lpConsoleCurrentFont);

    private enum StdHandle
    {
        OutputHandle = -11
    }

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

    static void Main(string[] args)
    {
        // Instantiating CONSOLE_FONT_INFOEX and setting cbsize
        CONSOLE_FONT_INFOEX ConsoleFontInfo = new CONSOLE_FONT_INFOEX();
        ConsoleFontInfo.cbSize = (uint)Marshal.SizeOf(ConsoleFontInfo);

        GetCurrentConsoleFontEx(GetStdHandle(StdHandle.OutputHandle), false, ref ConsoleFontInfo);

        // Printing the results
        Console.WriteLine($"Font size is: x: {ConsoleFontInfo.dwFontSize.X} y: {ConsoleFontInfo.dwFontSize.Y}");
        Console.WriteLine($"Font name is: {ConsoleFontInfo.FaceName}");
        Console.WriteLine($"Fontfamily is: {ConsoleFontInfo.FontFamily}");
        Console.WriteLine($"Fontweight is: {ConsoleFontInfo.FontWeight}");
        Console.WriteLine($"Font index is: {ConsoleFontInfo.nFont}");
        Console.ReadKey();
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct COORD
    {
        public short X;
        public short Y;

        public COORD(short x, short y)
        {
        X = x;
        Y = y;
        }
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    private struct CONSOLE_FONT_INFOEX
    {
        public uint cbSize;
        public uint nFont;
        public COORD dwFontSize;
        public int FontFamily;
        public int FontWeight;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string FaceName;
    }
    }
}

Documentation