728x90
반응형
728x170
▶ COORD.cs
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 좌표
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct COORD
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// X
/// </summary>
public short X;
/// <summary>
/// Y
/// </summary>
public short Y;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - COORD(x, y)
/// <summary>
/// 생성자
/// </summary>
/// <param name="x">X</param>
/// <param name="y">Y</param>
public COORD(short x, short y)
{
X = x;
Y = y;
}
#endregion
}
}
728x90
▶ CONSOLE_FONT_INFO_EX.cs
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 콘솔 폰트 정보 확장
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public unsafe struct CONSOLE_FONT_INFO_EX
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 크기
/// </summary>
public uint Size;
/// <summary>
/// 폰트
/// </summary>
public uint Font;
/// <summary>
/// 폰트 크기
/// </summary>
public COORD FontSize;
/// <summary>
/// 폰트 패밀리
/// </summary>
public int FontFamily;
/// <summary>
/// 폰트 가중치
/// </summary>
public int FontWeight;
/// <summary>
/// 페이스명
/// </summary>
public fixed char FaceName[ConsoleHelper.LF_FACESIZE];
#endregion
}
}
300x250
▶ ConsoleHelper.cs
using System;
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 콘솔 헬퍼
/// </summary>
public static class ConsoleHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Import
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 표준 핸들 구하기 - GetStdHandle(type)
/// <summary>
/// 표준 핸들 구하기
/// </summary>
/// <param name="type">타입</param>
/// <returns>표준 핸들</returns>
[DllImport("kernel32", SetLastError = true)]
private static extern IntPtr GetStdHandle(int type);
#endregion
#region 현재 콘솔 폰트 설정하기 - SetCurrentConsoleFontEx(outputHandle, maximumWindow, info)
/// <summary>
/// 현재 콘솔 폰트 설정하기
/// </summary>
/// <param name="outputHandle">출력 핸들</param>
/// <param name="maximumWindow">최대 창 크기 글꼴 정보 여부</param>
/// <param name="info">콘솔 폰트 정보 확장</param>
/// <returns>처리 결과</returns>
[DllImport("kernel32", SetLastError = true)]
private static extern bool SetCurrentConsoleFontEx(IntPtr outputHandle, bool maximumWindow, ref CONSOLE_FONT_INFO_EX info);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// INVALID_HANDLE_VALUE
/// </summary>
private static IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Instance
//////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// LF_FACESIZE
/// </summary>
public const int LF_FACESIZE = 32;
#endregion
//////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// STD_OUTPUT_HANDLE
/// </summary>
private const int STD_OUTPUT_HANDLE = -11;
/// <summary>
/// TMPF_TRUETYPE
/// </summary>
private const int TMPF_TRUETYPE = 4;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 폰트 설정하기 - SetFont(fontName, fontWidth, fontheight)
/// <summary>
/// 폰트 설정하기
/// </summary>
/// <param name="fontName">폰트명</param>
/// <param name="fontWidth">폰트 너비</param>
/// <param name="fontheight">폰트 높이</param>
public static void SetFont(string fontName, short fontWidth, short fontheight)
{
unsafe
{
IntPtr windowHandle = GetStdHandle(STD_OUTPUT_HANDLE);
if(windowHandle != INVALID_HANDLE_VALUE)
{
CONSOLE_FONT_INFO_EX info = new CONSOLE_FONT_INFO_EX();
info.Size = (uint)Marshal.SizeOf(info);
info.FontSize = new COORD(fontWidth, fontheight);
info.FontFamily = TMPF_TRUETYPE;
IntPtr pointer = new IntPtr(info.FaceName);
Marshal.Copy(fontName.ToCharArray(), 0, pointer, fontName.Length);
SetCurrentConsoleFontEx(windowHandle, false, ref info);
}
}
}
#endregion
}
}
반응형
▶ Program.cs
using System;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
ConsoleHelper.SetFont("궁서체", 8, 16);
Console.WriteLine("가나다라마바사아자차카타파하1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ");
Console.ReadKey(false);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] MemoryMappedFile 클래스 : CreateFromFile 정적 메소드를 사용해 메모리 매핑 파일 만들기 (0) | 2022.05.25 |
---|---|
[C#/COMMON] FileSystem 클래스 : CopyDirectory 정적 메소드를 사용해 디렉토리 복사하기 (0) | 2022.05.25 |
[C#/COMMON] Marshal 클래스 : Copy 정적 메소드를 사용해 문자열을 fixed char 필드에 복사하기 (0) | 2022.05.25 |
[C#/COMMON] DynamicMethod 클래스 : Invoke 메소드를 사용해 구조체 크기 구하기 (0) | 2022.05.25 |
[C#/COMMON] MemoryMappedFile 클래스 : CreateNew 정적 메소드를 사용해 시스템 메모리에서 메모리 매핑 파일 만들기 (0) | 2022.05.25 |
[C#/COMMON] WebClient 클라이언트 : 서버 인코딩 타입에 맞춰 문자열 다운로드하기 (0) | 2022.05.24 |
[C#/COMMON] 이스케이프 유니코드 문자열 구하기 (0) | 2022.05.23 |
[C#/COMMON] Process 클래스 : 원격 데스크톱 실행하기 (0) | 2022.05.13 |
[C#/COMMON] Process 클래스 : 원격 데스크톱 계정 등록하기 (0) | 2022.05.13 |
[C#/COMMON] Regex 클래스 : Replace 정적 메소드를 사용해 한글 문자열 구하기 (0) | 2022.05.13 |
댓글을 달아 주세요