C# - LockConsoleSize() : 콘솔 창 크기 고정 및 리사이즈 방지

2025. 10. 14. 16:47·C#

콘솔프로젝트 도중, 시작과 동시에 콘솔 창 크기를 고정하고, 창 크기를 바꾸지 못하게 고정하고 싶었다.

 

사실 Console.SetWindowSize()를 이용해서 창 크기를 설정할 수 있지만

이것만으로는 사용자가 마우스로 창 모서리를 드래그하거나, 최대화 버튼을 클릭하면...

콘솔 프로젝트는 그냥 망가져버릴 수 있다.

 

이 문제는 Window API를 사용해서 콘솔 창의 윈도우 스타일을 직접 수정하는 것으로 해결할 수 있다.

 

 

using System;
using System.Runtime.InteropServices;

namespace WeaponMasterDefense
{
    public static class ConsoleWindowManager
    {
        [DllImport("user32.dll")]
        private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

        [DllImport("user32.dll")]
        private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern IntPtr GetConsoleWindow();

        private const int GWL_STYLE = -16;
        private const int WS_MAXIMIZEBOX = 0x00010000;
        private const int WS_SIZEBOX = 0x00040000;

        public static void LockConsoleSize(int width, int height)
        {
            // 콘솔 버퍼 및 창 크기 일치시켜서 스크롤바 제거
            Console.SetBufferSize(width, height);
            Console.SetWindowSize(width, height);

            // Win32 API로 리사이즈 및 최대화 버튼 제거
            IntPtr handle = GetConsoleWindow();
            int style = GetWindowLong(handle, GWL_STYLE);
            style &= ~WS_MAXIMIZEBOX; // 최대화 버튼 비활성화
            style &= ~WS_SIZEBOX;     // 테두리 드래그 불가
            SetWindowLong(handle, GWL_STYLE, style);
        }
    }
}

 

 

이것이 해당 기능을 구현한 클래스다.

 

private const int GWL_STYLE = -16;
private const int WS_MAXIMIZEBOX = 0x00010000;
private const int WS_SIZEBOX = 0x00040000;
  • GWL_STYLE : 윈도우의 스타일 정보를 조회/수정하는 인덱스
  • WS_MAXIMIZEBOX : 최대화 버튼 활성화 플래그
  • WS_SIZEBOX : 창 크기 조절(드래그) 가능 여부

이 두 가지 비트를 꺼주면,
사용자가 콘솔 창을 최대화하거나 크기 변경할 수 없게 된다.

 

 

 

이제 프로그램 시작 지점에서

ConsoleWindowManager.LockConsoleSize(120, 40);

 

이런식으로 메서드를 호출해 간단하게 콘솔을 고정할 수 있다.

 

 

이렇게 콘솔 크기가 고정되고, 최대화 버튼이 비활성화 된다.

 

 

단, 윈도우 11의 텝 방식 콘솔이나 맥, 리눅스 환경에서는 작동하지 않을 수 있으며

디스플레이 해상도 상태에 따라서도 최대 버퍼 크기가 다르기 때문에 주의해야한다.

 

'C#' 카테고리의 다른 글

C# - 콘솔로 "2중 버퍼링 (Double Buffering)" 구현하기  (0) 2025.10.15
C# - GetAsnycKeyState() 기반 실시간 키 입력 처리  (0) 2025.10.14
C# - 콘솔 폰트 크기 변경하기 SetCurrentConsoleFontEx  (1) 2025.10.13
C# - 메모리 구조, GC  (0) 2025.10.13
C# - 정렬 알고리즘 (Sorting Algoritm) : 버블/선택/삽입/병합/퀵 정렬  (0) 2025.10.13
'C#' 카테고리의 다른 글
  • C# - 콘솔로 "2중 버퍼링 (Double Buffering)" 구현하기
  • C# - GetAsnycKeyState() 기반 실시간 키 입력 처리
  • C# - 콘솔 폰트 크기 변경하기 SetCurrentConsoleFontEx
  • C# - 메모리 구조, GC
ellug
ellug
Web / App / Game Dev
  • ellug
    dev.ellug
    ellug
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • Javascript (React, Next) (1)
      • C# (66)
      • Graphics (1)
      • Unity (25)
      • 프로그래머스 (0)
        • Lv.0 (0)
        • Lv.1 (0)
        • Lv.2 (0)
        • Lv.3 (0)
      • AI Agent (0)
      • StableDiffusion (0)
      • ETC (1)
      • 잡담 (0)
      • 유머 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Photon
    struct
    스택
    최적화
    Network
    useState
    유니티
    콘솔
    Design Pattern
    터미널
    네트워크
    추상 클래스
    Abstract
    Queue
    inputsystem
    console
    delegate
    stack
    알고리즘
    interface
    클래스
    unity
    function
    자료구조
    class
    firebase
    list
    C#
    큐
    게임
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ellug
C# - LockConsoleSize() : 콘솔 창 크기 고정 및 리사이즈 방지
상단으로

티스토리툴바