일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 실습으로 다지는 c#
- 졸업 작품 소재
- 소스 코드
- 표준 입출력
- 동영상
- c#
- 강의
- 산책하기 좋은 곳
- 추천
- c언어
- 충남 천안
- 무료 동영상 강의
- 캡슐화
- 안드로이드 앱 개발
- 알고리즘
- 유튜브 동영상 강의
- 언제나 휴일
- 네트워크 프로그래밍
- 실습
- 소켓 통신
- 언제나휴일
- 표준 라이브러리 함수
- 동영상 강의
- 프로젝트
- 파이썬
- 원격 제어 프로그램
- C++
- Windows Forms
- 독립기념관
- 클래스 다이어그램
Archives
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
[실습으로 다지는 C#] 콘솔 글자 색 바꾸기 – Windows API 함수 사용 본문
이번 강의는 콘솔 글자 색을 바꾸는 실습입니다.
별다른 알고리즘은 없고 필요한 몇 개의 기술을 사용할 거예요.
기술 사용 노하우를 들여다 보고 따라해 보는 것이라 크게 고민을 하실 필요는 없어요.
콘솔의 글자 색을 바꾸기 위해 Windows API 함수를 사용할 수 있어요.
- 콘솔의 글자 색을 바꾸는 함수
WINBASEAPI BOOL WINAPI SetConsoleTextAttribute(_In_ HANDLE hConsoleOutput,_In_ WORD wAttributes);
- 표준 핸들을 얻어오는 함수
WINBASEAPI HANDLE WINAPI GetStdHandle(_In_ DWORD nStdHandle);
- 표준 출력 핸들 상수
#define STD_OUTPUT_HANDLE ((DWORD)-11)
Windows API와 같은 Native 기술을 사용할 때 DllImport 어튜리뷰트를 이용하여 외부에 있다는 것을 선언해 주어야 합니다.
그리고 인자 형식이 BOOL, INT, DWORD 등은 int로 표현하세요.
WORD는 short 형식으로 표현하세요.
HANDLE이나 포인터 형식은 IntPtr로 표현하세요.
선언문에서 정적 멤버로 캡슐화하고 외부에 있는 것을 extern으로 나타냅니다.
[DllImport("Kernel32.dll")]
static extern int SetConsoleTextAttribute(IntPtr hConsoleOutput, short wAttributes);
[DllImport("Kernel32.dll")]
static extern IntPtr GetStdHandle(int nStdHandle);
매크로 상수는 const 멤버로 설정하세요.
여기에서 이러한 멤버들은 WrapAPI 클래스를 만들어서 래핑(Wrapping)할게요. 단순히 래핑 목적이라 정적 클래스로 정의하는 것을 권합니다. 그리고 외부에서 접근해서 사용할 수 있는 멤버 메서드를 만들어 위에 선언한 멤버를 사용할게요.
이를 표현한 전체 코드입니다. 참고로 콘솔에서 사용할 수 있는 0~15까지의 색상 값을 열거형으로 정의했어요.
using System;
using System.Runtime.InteropServices;
namespace Windows_API_활용하여_콘솔_글자색_바꾸기
{
public enum ConTextColor { LACK, BLUE, GREEN, JADE, RED,
PURPLE, YELLOW, WHITE, GRAY, LIGHT_BLUE, LIGHT_GREEN,
LIGHT_JADE, LIGHT_RED, LIGHT_PURPLE,
LIGHT_YELLOW, LIGHT_WHITE };
public static class WrapAPI
{
[DllImport("Kernel32.dll")]
static extern int SetConsoleTextAttribute(IntPtr hConsoleOutput, short wAttributes);
[DllImport("Kernel32.dll")]
static extern IntPtr GetStdHandle(int nStdHandle);
const int STD_OUTPUT_HANDLE = -11;
public static void SetConsoleTextColor(ConTextColor color)
{
IntPtr handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, (short)color);
}
}
}
이제 래핑한 WrapAPI SetConsoleTextColor 정적 메서드를 사용하면 끝입니다.
//http://ehpub.co.kr
//실력으로 다지는 C#
//Windows API를 활용하여 콘솔 글자색 바꾸기
using System;
namespace Windows_API_활용하여_콘솔_글자색_바꾸기
{
class Program
{
static void Main(string[] args)
{
Console.ReadKey();
WrapAPI.SetConsoleTextColor(ConTextColor.GREEN);
Console.WriteLine("언제나 휴일");
Console.ReadKey();
WrapAPI.SetConsoleTextColor(ConTextColor.WHITE);
Console.WriteLine("실습으로 다지는 C#");
Console.ReadKey();
WrapAPI.SetConsoleTextColor(ConTextColor.LIGHT_PURPLE);
Console.WriteLine("http://ehpub.co.kr");
Console.ReadKey();
WrapAPI.SetConsoleTextColor(ConTextColor.WHITE);
}
}
}
낯선 기술을 사용하는 것은 두려울 수도 있지만 즐길 수 있다면 웃음을 줄 수도 있어요.
언제나휴일 여행 및 산책
'C# > 실습으로 다지는 C#' 카테고리의 다른 글
[실습으로 다지는 C#] CSV 파일 입출력 – StreamReader 클래스 및 StreamWriter 클래스 사용 (0) | 2025.01.08 |
---|---|
[실습으로 다지는 C#] 런타임에 라이브러리 로딩하여 사용하기 – .NET 리플렉션 (0) | 2025.01.08 |
[실습으로 다지는 C#] 학생 키우기 – 학생 구현 및 제어 (0) | 2025.01.08 |
[실습으로 다지는 C#] 콘솔 응용의 기본 제어 – 메뉴로 상호 작용 (0) | 2025.01.08 |
[실습으로 다지는 C#]택배 요금 계산 시뮬레이션 (1) | 2025.01.08 |
[실습으로 다지는 C#] 실현 관계(Realization) 실습 (0) | 2025.01.08 |
[실습으로 다지는 C#] 의존(Dependency) 관계 실습 – Part1 (0) | 2025.01.07 |
[실습으로 다지는 C#] 연관 관계(Association) 실습 – 의사, 약사 (1) | 2025.01.07 |