[WinAPI] CreateMutex, 대화상자 중복 실행 방지

오늘은 간단하게 CreateMutex를 사용하여 중복 실행 방지를 알아보도록 하겠습니다.
뮤텍스는 공유된 자원에 하나의 쓰레드만 접근할 수 있게 다른 쓰레드의 접근을 막는 방식중 하나입니다.
이 방식을 사용하여 보통 중복 실행을 방지하는 기능으로 많이 만듭니다.
MFC를 예제로 사용하는 방법을 알아보겠습니다.

프로젝트 생성 후 아래와 같이 “프로젝트명칭”App::IInitInstance()에 코딩해주세요

// CMFCApplication1App 초기화

BOOL CMFCApplication1App::InitInstance()
{
	// 입력
	HANDLE hMutex = ::CreateMutex( NULL, TRUE, _T( "mtx_running_Application_exe" ) );
	if ( ERROR_ALREADY_EXISTS == GetLastError() )
	{
		AfxMessageBox( _T( "프로그램이 이미 실행 중입니다." ) );
		return FALSE;
	}
	
	// 응용 프로그램 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
	// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControlsEx()가 필요합니다.
	// InitCommonControlsEx()를 사용하지 않으면 창을 만들 수 없습니다.

	// ...
}

실행해 보시면 아래와 같이 중복 실행이 방지됩니다.