多重起動を防止する。

アプリが起動しているときは速攻で終了させます。


まずCXXXApp::InitInstance()を書きかえる。

BOOL CXXXApp::InitInstance()
{
      :
      :
    m_hMutex = NULL;  // m_hMutexはHANDLE型のメンバ変数。
    HANDLE hMutex = CreateMutex(FALSE,0,_T("CXXXApp"));  // CXXXAppは適当な文字列。
    
    //すでに起動している場合終了させる
    if(::GetLastError() == ERROR_ALREADY_EXISTS )
    {
        CloseHandle(hMutex);
        return FALSE;
    }
      :
      :
    return TRUE;
}

次にクラスウィザードでExitInstance()を追加する。


int CXXXApp::ExitInstance() 
{
    // Mutexを開放する。開放しないと次から起動しなくなる。
    ReleaseMutex(m_hMutex);
    CloseHandle(m_hMutex);
    return CWinApp::ExitInstance();
}

忘れていけないのがm_hMutexをHANDLE型のメンバ変数で登録する。


class CPPChangeApp : public CWinApp
{
      :
      :
private:
    HANDLE m_hMutex; // 追加
      :
      :
};

[ 戻る ]