본문 바로가기

About Programing/03. Tip

MFC에서 Client 중복 실행 방지하는 방법


BOOL CARPuzzleApp::InitInstance()
{
	CheckOverlapRun ();

	return FALSE;
}

void CARPuzzleApp::CheckOverlapRun ()
{
	CWnd* pWnd = NULL;
	pWnd = CWnd::FindWindow(NULL, _T("사천성 ver 0.5 - Title"));

	if(pWnd) // 중복 실행이 되었을 경우
	{
		// 중복 실행 중인 프로그램 화면에 표시
		pWnd->ShowWindow(SW_SHOW);
		pWnd->SetForegroundWindow();
	}
	else
	{
		// 레지스트리 등록
		::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wc);
		wc.lpszClassName = "사천성 ver 0.5 - Title";
		AfxRegisterClass(&wc);

		INITCOMMONCONTROLSEX InitCtrls;
		InitCtrls.dwSize = sizeof(InitCtrls);
		InitCtrls.dwICC = ICC_WIN95_CLASSES;
		InitCommonControlsEx(&InitCtrls);

		CWinAppEx::InitInstance();

		AfxEnableControlContainer();

		SetRegistryKey(_T("로컬 응용 프로그램 마법사에서 생성된 응용 프로그램"));

		CARPuzzleDlg dlg;
		m_pMainWnd = &dlg;
		INT_PTR nResponse = dlg.DoModal();

		if (nResponse == IDOK)
		{

		}
		else if (nResponse == IDCANCEL)
		{

		}
	}
}
int CARPuzzleApp::ExitInstance()
{
	// 레지스터리 해제
	UnregisterClass("사천성 ver 0.5 - Title", wc.hInstance);

	return CWinAppEx::ExitInstance();
}