アプリケーションの多重起動を防止する(VC++) Avoiding Multiple Application Instances HANDLE m_hMutex; ... BOOL CTestApp::InitInstance() { ... m_hMutex;= CreateMutex(NULL, TRUE, _T("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")); if(GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandlem_hMutex; CWnd* pWnd = CWnd::FindWindow(NULL, _T("TestApplication")); if (pWnd) pWnd->SetForegroundWindow(); return FALSE; } ... } 2.ミューテックスオブジェクトを開放します。CWinAppの派生クラスを利用する場合は、ExitInstance()関数で実装しますが、SDKの場合 は、プログラムの最後の場所に実装します。 int CTestApp::ExitInstance() { ... if (m_hMutex != NULL) { ReleaseMutex(m_hMutex); CloseHandle(m_hMutex); m_hMutex = NULL; } ... return CWinApp::ExitInstance(); } |