[StructLayout(LayoutKind.Sequential)]
public struct COORD
{
public short X;
public short Y;
public COORD(short X, short Y) { this.X = X; this.Y = Y; }
};
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
public class CONSOLE_FONT_INFO_EX
{
public CONSOLE_FONT_INFO_EX()
{
cbSize = Marshal.SizeOf<CONSOLE_FONT_INFO_EX>();
}
public int cbSize;
public int nFont;
public COORD dwFontSize;
public int FontFamily;
public int FontWeight;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)]
public string FaceName;
}
class Program
{
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
extern static bool GetCurrentConsoleFontEx(
IntPtr hConsoleOutput,
bool bMaximumWindow,
[In, Out] CONSOLE_FONT_INFO_EX lpConsoleCurrentFont);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetCurrentConsoleFontEx(
IntPtr ConsoleOutput,
bool MaximumWindow,
CONSOLE_FONT_INFO_EX ConsoleCurrentFontEx
);
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(int dwType);
static void Main(string[] args)
{
Console.WriteLine("Hello, I am console output");
const int STD_OUTPUT_HANDLE = -11;
IntPtr handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFO_EX fi = new CONSOLE_FONT_INFO_EX();
var result = GetCurrentConsoleFontEx(handle, false, fi);
if (!result)
return;
Console.WriteLine("Now font is " + fi.FaceName + " setting to Lucida Console");
fi.FaceName = "Lucida Console";
result = SetCurrentConsoleFontEx(handle, false, fi);
if (!result)
return;
Console.WriteLine("Hello, I am console output with new font");
}
}
通过 WinAPI 一切皆有可能!
这是这样一个程序:
给出结果: