소스코드 블로그에 올리기

Posted by Programmer™
2025. 1. 5. 18:44 카테고리 없음

 

 

1. Color Scripter 홈페이지에 접속합니다.

 

 https://colorscripter.com/

 

Color Scripter

Simple & Flexible Syntax HighLighter

colorscripter.com

 

 

2. 소스코드를 붙여넣기 합니다.

 

 

 

3. 스타일패키지를 바꿔줍니다.

 

4. 세부설정에서는 보다 세세하게 설정가능합니다.

 

 

 

5. HTML로 복사를 클릭 후 본인 블로그의 HTML 모드에서 붙여넣기 하면 됩니다.

 

 

 

6. 그러면 아래처럼 표시되게 됩니다.

 

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
32
33
#define _CRT_SECURE_NO_WARNINGS
#define WIN32_LEAN_AND_MEAN
 
#include <io.h>
#include <time.h>
#include <wchar.h>
 
#pragma warning(disable : 4996)
 
#define ESC "\x1b"
 
#pragma pack(push,1)
typedef struct _IDEREGS {
    BYTE  bFeaturesReg;        // Used for specifying SMART "commands".
    BYTE  bSectorCountReg;    // IDE sector count register.
    BYTE  bSectorNumberReg;    // IDE sector number register.
    BYTE  bCylLowReg;        // IDE low order cylinder value.
    BYTE  bCylHighReg;        // IDE high order cylinder value.
    BYTE  bDriveHeadReg;    // IDE drive/head register.
    BYTE  bCommandReg;        // Actual IDE command.
    BYTE  bReserved;        // Reserved for future use. Must be 0.
} IDEREGS, * PIDEREGS; 
#pragma pack(pop)
 
int main(int argc, char* argv[])
{   
 
    printf("Press Enter key to exit...");
    getchar();
 
    return 0;
 
}
cs

 

 

콘솔창 크기 바꾸기

Posted by Programmer™
2025. 1. 5. 18:08 카테고리 없음

1. 창 크기 바꾸기

 

SetWindowPos(GetConsoleWindow(), 0, 0, 0, 670, 570, SWP_NOMOVE | SWP_SHOWWINDOW);

 

2. 창 제목 바꾸기

 

SetWindowTextW(GetConsoleWindow(), L"Hello SetWindowText");

 

3. 텍스트 서식 지정

 

이 명령은 아래의 <n> 위치에 세미콜론으로 구분된 0~16개의 매개 변수를 사용할 수 있다

Sequence 코드 설명 동작
ESC [ <n> m SGR 그래픽 변환 설정 <n>에 지정된 대로 화면 및 텍스트의 서식을 설정합니다.

 

 

SetConsoleScreenBufferInfoEx API 와 관련이 있다.

BOOL WINAPI SetConsoleScreenBufferInfoEx(
  _In_ HANDLE                        hConsoleOutput,
  _In_ PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx
);

 

CONSOLE_SCREEN_BUFFER_INFOEX 구조체

typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX {
  ULONG      cbSize;
  COORD      dwSize;
  COORD      dwCursorPosition;
  WORD       wAttributes;
  SMALL_RECT srWindow;
  COORD      dwMaximumWindowSize;
  WORD       wPopupAttributes;
  BOOL       bFullscreenSupported;
  COLORREF   ColorTable[16];
} CONSOLE_SCREEN_BUFFER_INFOEX, *PCONSOLE_SCREEN_BUFFER_INFOEX;

 

설명 동작
0 기본값 모든 특성을 수정 전의 기본 상태로 되돌리기
1 굵게/밝게 전경색에 밝기/강도 플래그 적용
22 굵지 않음/밝지 않음 전경색에서 밝기/강도 플래그 제거
4 밑줄 밑줄 추가
24 밑줄 없음 밑줄 제거
7 부정 전경색과 배경색 바꾸기
27 양수(음수 불가능) 전경/배경으로 기본으로 되돌리기
30 전경 검은색 전경에 굵지 않은/밝지 않은 검은색 적용
31 전경 빨강 전경에 굵지 않은/밝지 않은 빨강 적용
32 전경 녹색 전경에 굵지 않은/밝지 않은 녹색 적용
33 전경 노랑 전경에 굵지 않은/밝지 않은 노랑 적용
34 전경 파랑 전경에 굵지 않은/밝지 않은 파랑 적용
35 전경 자홍 전경에 굵지 않은/밝지 않은 자홍 적용
36 전경 녹청 전경에 굵지 않은/밝지 않은 녹청 적용
37 전경 흰색 전경에 굵지 않은/밝지 않은 흰색 적용
38 전경 확장 전경에 확장된 색 값 적용(아래 세부 정보 참조)
39 전경 기본값 전경 기본값 부분만 적용(0 참조)
40 배경 검은색 배경에 굵지 않은/밝지 않은 검은색 적용
41 배경 빨강 배경에 굵지 않은/밝지 않은 빨강 적용
42 배경 녹색 배경에 굵지 않은/밝지 않은 녹색 적용
43 배경 노랑 배경에 굵지 않은/밝지 않은 노랑 적용
44 배경 파랑 배경에 굵지 않은/밝지 않은 파랑 적용
45 배경 자홍 배경에 굵지 않은/밝지 않은 자홍 적용
46 배경 녹청 배경에 굵지 않은/밝지 않은 녹청 적용
47 배경 흰색 배경에 굵지 않은/밝지 않은 흰색 적용
48 배경 확장 배경에 확장된 색 값 적용(아래 세부 정보 참조)
49 배경 기본값 배경 기본값 부분만 적용(0 참조)
90 밝은 전경 검은색 전경에 굵은/밝은 검은색 적용
91 밝은 전경 빨강 전경에 굵은/밝은 빨강 적용
92 밝은 전경 녹색 전경에 굵은/밝은 녹색 적용
93 밝은 전경 노랑 전경에 굵은/밝은 노랑 적용
94 밝은 전경 파랑 전경에 굵은/밝은 파랑 적용
95 밝은 전경 자홍 전경에 굵은/밝은 자홍 적용
96 밝은 전경 녹청 전경에 굵은/밝은 녹청 적용
97 밝은 전경 흰색 전경에 굵은/밝은 흰색 적용
100 밝은 배경 검은색 배경에 굵은/밝은 검은색 적용
101 밝은 배경 빨강 배경에 굵은/밝은 빨강 적용
102 밝은 배경 녹색 배경에 굵은/밝은 녹색 적용
103 밝은 배경 노랑 배경에 굵은/밝은 노랑 적용
104 밝은 배경 파랑 배경에 굵은/밝은 파랑 적용
105 밝은 배경 자홍 배경에 굵은/밝은 자홍 적용
106 밝은 배경 녹청 배경에 굵은/밝은 녹청 적용
107 밝은 배경 흰색 배경에 굵은/밝은 흰색 적용

 

※ 예제 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
// System headers
#include <windows.h>
 
// Standard library C-style
#include <wchar.h>
#include <stdlib.h>
#include <stdio.h>
 
#define ESC "\x1b"
#define CSI "\x1b["
 
bool EnableVTMode()
{
    // Set output mode to handle virtual terminal sequences
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hOut == INVALID_HANDLE_VALUE)
    {
        return false;
    }
 
    DWORD dwMode = 0;
    if (!GetConsoleMode(hOut, &dwMode))
    {
        return false;
    }
 
    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    if (!SetConsoleMode(hOut, dwMode))
    {
        return false;
    }
    return true;
}
 
void PrintVerticalBorder()
{
    printf(ESC "(0"); // Enter Line drawing mode
    printf(CSI "104;93m"); // bright yellow on bright blue
    printf("x"); // in line drawing mode, \x78 -> \u2502 "Vertical Bar"
    printf(CSI "0m"); // restore color
    printf(ESC "(B"); // exit line drawing mode
}
 
void PrintHorizontalBorder(COORD const Size, bool fIsTop)
{
    printf(ESC "(0"); // Enter Line drawing mode
    printf(CSI "104;93m"); // Make the border bright yellow on bright blue
    printf(fIsTop ? "l" : "m"); // print left corner 
 
    for (int i = 1; i < Size.X - 1; i++)
        printf("q"); // in line drawing mode, \x71 -> \u2500 "HORIZONTAL SCAN LINE-5"
 
    printf(fIsTop ? "k" : "j"); // print right corner
    printf(CSI "0m");
    printf(ESC "(B"); // exit line drawing mode
}
 
void PrintStatusLine(const char* const pszMessage, COORD const Size)
{
    printf(CSI "%d;1H", Size.Y);
    printf(CSI "K"); // clear the line
    printf(pszMessage);
}
 
int __cdecl wmain(int argc, WCHAR* argv[])
{
    argc; // unused
    argv; // unused
    //First, enable VT mode
    bool fSuccess = EnableVTMode();
    if (!fSuccess)
    {
        printf("Unable to enter VT processing mode. Quitting.\n");
        return -1;
    }
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hOut == INVALID_HANDLE_VALUE)
    {
        printf("Couldn't get the console handle. Quitting.\n");
        return -1;
    }
 
    CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo;
    GetConsoleScreenBufferInfo(hOut, &ScreenBufferInfo);
    COORD Size;
    Size.X = ScreenBufferInfo.srWindow.Right - ScreenBufferInfo.srWindow.Left + 1;
    Size.Y = ScreenBufferInfo.srWindow.Bottom - ScreenBufferInfo.srWindow.Top + 1;
 
    // Enter the alternate buffer
    printf(CSI "?1049h");
 
    // Clear screen, tab stops, set, stop at columns 16, 32
    printf(CSI "1;1H");
    printf(CSI "2J"); // Clear screen
 
    int iNumTabStops = 4// (0, 20, 40, width)
    printf(CSI "3g"); // clear all tab stops
    printf(CSI "1;20H"); // Move to column 20
    printf(ESC "H"); // set a tab stop
 
    printf(CSI "1;40H"); // Move to column 40
    printf(ESC "H"); // set a tab stop
 
    // Set scrolling margins to 3, h-2
    printf(CSI "3;%dr", Size.Y - 2);
    int iNumLines = Size.Y - 4;
 
    printf(CSI "1;1H");
    printf(CSI "102;30m");
    printf("Windows 10 Anniversary Update - VT Example");
    printf(CSI "0m");
 
    // Print a top border - Yellow
    printf(CSI "2;1H");
    PrintHorizontalBorder(Size, true);
 
    // // Print a bottom border
    printf(CSI "%d;1H", Size.Y - 1);
    PrintHorizontalBorder(Size, false);
 
    wchar_t wch;
 
    // draw columns
    printf(CSI "3;1H");
    int line = 0;
    for (line = 0; line < iNumLines * iNumTabStops; line++)
    {
        PrintVerticalBorder();
        if (line + 1 != iNumLines * iNumTabStops) // don't advance to next line if this is the last line
            printf("\t"); // advance to next tab stop
 
    }
 
    PrintStatusLine("Press any key to see text printed between tab stops.", Size);
    wch = _getwch();
 
    // Fill columns with output
    printf(CSI "3;1H");
    for (line = 0; line < iNumLines; line++)
    {
        int tab = 0;
        for (tab = 0; tab < iNumTabStops - 1; tab++)
        {
            PrintVerticalBorder();
            printf("line=%d", line);
            printf("\t"); // advance to next tab stop
        }
        PrintVerticalBorder();// print border at right side
        if (line + 1 != iNumLines)
            printf("\t"); // advance to next tab stop, (on the next line)
    }
 
    PrintStatusLine("Press any key to demonstrate scroll margins", Size);
    wch = _getwch();
 
    printf(CSI "3;1H");
    for (line = 0; line < iNumLines * 2; line++)
    {
        printf(CSI "K"); // clear the line
        int tab = 0;
        for (tab = 0; tab < iNumTabStops - 1; tab++)
        {
            PrintVerticalBorder();
            printf("line=%d", line);
            printf("\t"); // advance to next tab stop
        }
        PrintVerticalBorder(); // print border at right side
        if (line + 1 != iNumLines * 2)
        {
            printf("\n"); //Advance to next line. If we're at the bottom of the margins, the text will scroll.
            printf("\r"); //return to first col in buffer
        }
    }
 
    PrintStatusLine("Press any key to exit", Size);
    wch = _getwch();
 
    // Exit the alternate buffer
    printf(CSI "?1049l");
 
}
cs

 

 

 실제 프로그램에서는 아래처럼 사용할 수 있다.