'중복실행방지'에 해당되는 글 1건

  1. 뮤텍스를 이용한 프로그램 중복실행 방지


헤더파일: App Class (.h)

  
// 뮤텍스 핸들 선언
protected:
	HANDLE m_hMutex;


소스파일: App Class (.cpp)

  
#define STRING_MUTEX_NAME		"뮤텍스 이름"
#define STRING_CAPTION_NAME		"프로그램 이름(Caption)"

//
// 생성자 뮤텍스 핸들 초기화
//
CClassApp::CClassApp()
{
	m_hMutex = NULL;
}

//
// 프로그램 중복실행 방지
//
CClassApp::InitInstance()
{
	if(NULL == ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, STRING_MUTEX_NAME))
	{
		// 중복실행이 아니므로 뮤택스 생성
		m_hMutex = ::CreateMutex(NULL, FALSE, STRING_MUTEX_NAME);
		if(m_hMutex == NULL)
		{
			AfxMessageBox(_T("프로그램 실행에 실패하였습니다."), MB_OK|MB_ICONEXCLAMATION);
			return FALSE;
		}
	}
	else
	{
		// 중복실행일 경우 기존 열려있는 창을 맨 앞으로 보여줌
		// 만약, 창이 최소화 상태라면 최소화 상태 해제
		CWnd*  pWnd = NULL;
		pWnd = CWnd::FindWindow(NULL, STRING_CAPTION_NAME);
		if(pWnd != NULL)
		{
			if(pWnd->IsIconic()) 
				pWnd->ShowWindow(SW_RESTORE);
			else     
				pWnd->SetForegroundWindow();
		}
		else
		{
			pWnd = CWnd::FindWindow(NULL, STRING_CAPTION_NAME);
			if(pWnd != NULL)
			{
				if(pWnd->IsIconic()) 
					pWnd->ShowWindow(SW_RESTORE);
				else     
					pWnd->SetForegroundWindow();
			}
		}
		return FALSE;
	}  

	// 기존 코드
}


'개발이야기 > MFC' 카테고리의 다른 글

fopen_s 파일읽기와 저장  (0) 2012.06.14
MFC 디렉토리 생성과 삭제  (0) 2012.05.25
일정 날짜 기준 로그파일 제거  (1) 2012.05.17
로컬 IP주소 얻기  (0) 2012.05.17
유니코드 ↔ 안시 변환함수  (0) 2012.05.16