즐겁게 개발을...

개발보다 게임이 더 많이 올라오는 것 같은...

개발/C#

[2022.09] 이중실행 방지

다물칸 2022. 9. 26. 13:57
728x90
반응형

사용자 실수로 인해 두번이상 실행을 막는 구문입니다. 

자세한 내용은 주석을 참고해주세요.

 

// 클래스 밖에서 선언해주세요.
[DllImport("user32.dll")]
public static extern bool IsIconic(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

public static int SW_RESTORE = 9;

// Program.cs 메인함수 내에 추가해주세요. 메인폼 들어가기 직전에 넣어주시면 됩니다. 

Process[] pProcess = Process.GetProcessesByName(Assembly.GetEntryAssembly().GetName().Name);
if (pProcess.Length > 1)
{
    Process view = pProcess[0];

    IntPtr hWndOfPrevInstance = view.MainWindowHandle;
    // 만약 핸들이 살아있다면
    if (IsIconic(hWndOfPrevInstance))
    	// 최소화 된 상태를 노말상태로 띄우는 윈도우 메시지를 송신합니다.
        ShowWindowAsync(hWndOfPrevInstance, SW_RESTORE);
    // 전면에 뛰우는 윈도우 메시지를 송신합니다.
    SetForegroundWindow(hWndOfPrevInstance);
    // 현재 실행된 프로그램은 종료합니다.
    Application.Exit();
    return;
}
반응형