몇몇 작업을 하다 보면 사용자가 닫기 버튼을 사용하는 것을 막아야 할때가 있습니다. 예로, 한창 백그라운드 작업 중인데, 닫기 버튼을 클릭 해버리면 낭패죠. C# 기본 컨트롤 들이야 컨트롤명.Enabled = false; 식으로 간단하게 비활성화가 가능하지만 윈도우의 기본 닫기 X 버튼을 비활성화 하기에는 약간의 추가 작업이 필요합니다.

using System.Runtime.InteropServices;

private const int SC_CLOSE = 0xF060;
private const int MF_ENABLED = 0x0;
private const int MF_GRAYED = 0x1;
private const int MF_DISABLED = 0x2;

[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")]
private static extern int EnableMenuItem(IntPtr hMenu, int wIDEnableItem, int wEnable);

public Form1()
{
    InitializeComponent();
    EnableMenuItem(GetSystemMenu(this.Handle, false), SC_CLOSE, MF_GRAYED);
}


+ Recent posts