アプリケーションの複数起動を禁止する
Mutexを使用する方法が多く紹介されていますが、ここではちょっと違った方法を紹介します。 Cで記述する場合にはよく使う方法ですが、FindWindowによって自アプリケーションの登録クラス名を検索し、見つかればすでに起動中と判断します。 このためには、MFCで作成した自アプリケーションのクラス名を独自に登録する必要があります。

以下はMDIアプリケーションの場合の例:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if ( !CMDIFrameWnd::PreCreateWindow( cs ))
        return ( FALSE );

    // TODO: この位置で CREATESTRUCT cs を修正して、Window クラスやスタイルを
    // 修正してください。

    // ウインドウクラス名とアイコンを独自のものに差し替える
    LPCSTR lpszNewName = "MyClassname";
    HINSTANCE hInst = AfxGetInstanceHandle();
    WNDCLASS wc;
    if ( !::GetClassInfo( hInst, lpszNewName, &wc ))
    {
        ::GetClassInfo( hInst, cs.lpszClass, &wc );
        wc.lpszClassName = lpszNewName;
        wc.hIcon = ::LoadIcon( hInst, MAKEINTRESOURCE( IDR_MAINFRAME ));
        ::RegisterClass( &wc );
    }
    cs.lpszClass = lpszNewName;

    return ( TRUE );
}

BOOL CMyApp::Initinstance()
{
     : (省略)

    // 多重起動の禁止
    HWND hPrevwnd = ::FindWindow(( LPCTSTR )"MyClassname", NULL );
    if ( hPrevwnd != NULL )
    {
        if ( ::IsIconic( hPrevwnd ))
            ::OpenIcon( hPrevwnd );
        ::BringWindowToTop( hPrevwnd );
        // 自分自身はここで終了する
        return ( FALSE );
    }

     : (省略)
}