Last Updated 2004/03/01
Programming Tips Visual C++ API  索 引 
多重起動防止
2004/03/01

Windows95 や WindowsNT などで多重起動を防止するにはウィンドウクラス(WNDCLASS)にて判断する.

    BOOL CMyApp::InitInstance()
    {

        if( FindWindow("MyFrameClass", NULL) != NULL ){
            return FALSE;
        }

    }

この方法を使用するには PreCreateWindow() にてウィンドウクラスを登録しなければならない.


または Mutex にて判断する.

    BOOL CMyApp::InitInstance()
    {

        HANDLE hPrevMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"MyInstance");
        if(hPrevMutex) {
            CloseHandle(hPrevMutex);
            return FALSE;
        }
        // hMutex は HANDLE 型 protected メンバ
        hMutex = CreateMutex(FALSE, 0, "MyInstance");

     }

    int CMyApp::ExitInstance() 
    {
        ReleaseMutex(hMutex);
        return CWinApp::ExitInstance();
    }

この方法でほとんど問題はないが,同じアプリケーションが殆ど同時に複数起動された時に,全員 OpenMutex() に失敗して,(1つを除いて全員)CreateMutex() にも失敗するかもしれない.


参照
ウィンドウクラスの登録(多重起動防止)
前後のTips
多重起動防止

DSS ProgrammingTipsCGI Ver2.01