// TouchBoard.cpp : ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇÑ Å¬·¡½º µ¿ÀÛÀ» Á¤ÀÇÇÕ´Ï´Ù. // #include "stdafx.h" #include "TouchBoard.h" #include "TouchBoardDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CTouchBoardApp BEGIN_MESSAGE_MAP(CTouchBoardApp, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP() // CTouchBoardApp »ý¼º CTouchBoardApp::CTouchBoardApp() { // ´Ù½Ã ½ÃÀÛ °ü¸®ÀÚ Áö¿ø m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; // TODO: ¿©±â¿¡ »ý¼º Äڵ带 Ãß°¡ÇÕ´Ï´Ù. // InitInstance¿¡ ¸ðµç Áß¿äÇÑ ÃʱâÈ­ ÀÛ¾÷À» ¹èÄ¡ÇÕ´Ï´Ù. } // À¯ÀÏÇÑ CTouchBoardApp °³Ã¼ÀÔ´Ï´Ù. CTouchBoardApp theApp; // CTouchBoardApp ÃʱâÈ­ ULONG ProcIDFromWnd(HWND hwnd) { ULONG idProc; GetWindowThreadProcessId( hwnd, &idProc ); return idProc; } HWND GetWinHandle(ULONG pid) { HWND tempHwnd = ::FindWindow(NULL,NULL); // ÃÖ»óÀ§ À©µµ¿ì ÇÚµé ã±â while( tempHwnd != NULL ) { if( ::GetParent(tempHwnd) == NULL ) if( pid == ProcIDFromWnd(tempHwnd) ) return tempHwnd; tempHwnd = ::GetWindow(tempHwnd, GW_HWNDNEXT); } return NULL; } #include #include void PrintProcessNameAndID(DWORD processID, CString& strPath) { TCHAR szProcessName[MAX_PATH] = TEXT(""); // Get a handle to the process. HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); // Get the process name. if (NULL != hProcess ) { HMODULE hMod; DWORD cbNeeded; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) { GetModuleFileNameEx( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR)); } } // Print the process name and identifier. strPath = szProcessName; // Release the handle to the process. CloseHandle( hProcess ); } BOOL EnumProcessAndFocus(CString processPath) { DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; BOOL bFound = false; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) { return false; } // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); // Print the name and process identifier for each process. for ( i = 0; i < cProcesses; i++ ) { if( aProcesses[i] != 0 ) { CString strPath; PrintProcessNameAndID( aProcesses[i], strPath ); if(strPath.Find(processPath) >= 0) { HWND hwnd = GetWinHandle(aProcesses[i]); ::BringWindowToTop(hwnd); ::SetForegroundWindow(hwnd); ::ShowWindow(hwnd, SW_SHOWDEFAULT); bFound = true; } } } return bFound; } BOOL CTouchBoardApp::InitInstance() { // ÀÀ¿ë ÇÁ·Î±×·¥ ¸Å´ÏÆä½ºÆ®°¡ ComCtl32.dll ¹öÀü 6 ÀÌ»óÀ» »ç¿ëÇÏ¿© ºñÁÖ¾ó ½ºÅ¸ÀÏÀ» // »ç¿ëÇϵµ·Ï ÁöÁ¤ÇÏ´Â °æ¿ì, Windows XP »ó¿¡¼­ ¹Ýµå½Ã InitCommonControlsEx()°¡ ÇÊ¿äÇÕ´Ï´Ù. // InitCommonControlsEx()¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é âÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù. INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ¸ðµç °ø¿ë ÄÁÆ®·Ñ Ŭ·¡½º¸¦ Æ÷ÇÔÇϵµ·Ï // ÀÌ Ç׸ñÀ» ¼³Á¤ÇϽʽÿÀ. InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); if (!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); return FALSE; } /* Áߺ¹ ½ÇÇà ¹æÁö - added by ritoseo */ HANDLE hEvent; hEvent = CreateEvent(NULL, FALSE, TRUE, AfxGetAppName()); if ( GetLastError() == ERROR_ALREADY_EXISTS) { EnumProcessAndFocus(L"TouchBoard.exe"); return FALSE; } /************************************/ AfxEnableControlContainer(); // ´ëÈ­ »óÀÚ¿¡ ¼Ð Æ®¸® ºä ¶Ç´Â // ¼Ð ¸ñ·Ï ºä ÄÁÆ®·ÑÀÌ Æ÷ÇԵǾî ÀÖ´Â °æ¿ì ¼Ð °ü¸®ÀÚ¸¦ ¸¸µì´Ï´Ù. CShellManager *pShellManager = new CShellManager; // MFC ÄÁÆ®·ÑÀÇ Å׸¶¸¦ »ç¿ëÇϱâ À§ÇØ "Windows ¿øÇü" ºñÁÖ¾ó °ü¸®ÀÚ È°¼ºÈ­ CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); // Ç¥ÁØ ÃʱâÈ­ // ÀÌµé ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê°í ÃÖÁ¾ ½ÇÇà ÆÄÀÏÀÇ Å©±â¸¦ ÁÙÀÌ·Á¸é // ¾Æ·¡¿¡¼­ ÇÊ¿ä ¾ø´Â ƯÁ¤ ÃʱâÈ­ // ·çƾÀ» Á¦°ÅÇØ¾ß ÇÕ´Ï´Ù. // ÇØ´ç ¼³Á¤ÀÌ ÀúÀåµÈ ·¹Áö½ºÆ®¸® ۸¦ º¯°æÇϽʽÿÀ. // TODO: ÀÌ ¹®ÀÚ¿­À» ȸ»ç ¶Ç´Â Á¶Á÷ÀÇ À̸§°ú °°Àº // ÀûÀýÇÑ ³»¿ëÀ¸·Î ¼öÁ¤ÇØ¾ß ÇÕ´Ï´Ù. SetRegistryKey(_T("·ÎÄà ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ »ý¼ºµÈ ÀÀ¿ë ÇÁ·Î±×·¥")); CTouchBoardDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: ¿©±â¿¡ [È®ÀÎ]À» Ŭ¸¯ÇÏ¿© ´ëÈ­ »óÀÚ°¡ ¾ø¾îÁú ¶§ ó¸®ÇÒ // Äڵ带 ¹èÄ¡ÇÕ´Ï´Ù. } else if (nResponse == IDCANCEL) { // TODO: ¿©±â¿¡ [Ãë¼Ò]¸¦ Ŭ¸¯ÇÏ¿© ´ëÈ­ »óÀÚ°¡ ¾ø¾îÁú ¶§ ó¸®ÇÒ // Äڵ带 ¹èÄ¡ÇÕ´Ï´Ù. } else if (nResponse == -1) { TRACE(traceAppMsg, 0, "°æ°í: ´ëÈ­ »óÀÚ¸¦ ¸¸µéÁö ¸øÇßÀ¸¹Ç·Î ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¿¹±âÄ¡ ¾Ê°Ô Á¾·áµË´Ï´Ù.\n"); TRACE(traceAppMsg, 0, "°æ°í: ´ëÈ­ »óÀÚ¿¡¼­ MFC ÄÁÆ®·ÑÀ» »ç¿ëÇÏ´Â °æ¿ì #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS¸¦ ¼öÇàÇÒ ¼ö ¾ø½À´Ï´Ù.\n"); } // À§¿¡¼­ ¸¸µç ¼Ð °ü¸®ÀÚ¸¦ »èÁ¦ÇÕ´Ï´Ù. if (pShellManager != NULL) { delete pShellManager; } // ´ëÈ­ »óÀÚ°¡ ´ÝÇûÀ¸¹Ç·Î ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö ÆßÇÁ¸¦ ½ÃÀÛÇÏÁö ¾Ê°í ÀÀ¿ë ÇÁ·Î±×·¥À» ³¡³¾ ¼ö ÀÖµµ·Ï FALSE¸¦ // ¹ÝȯÇÕ´Ï´Ù. return FALSE; }