用一个静态变量纪录App(应用程序)的个数,超过一个就返回就行了,具体看你怎么处理了

解决方案 »

  1.   

    创建一个命名信号量,然后 GetLastError 返回 表示"已经存在" 的那个值.表示已经有个实例
    在运行,此时退出即可.
    CreateSemaphore
    GetLastError
      

  2.   

    这个问题已经有很多人问过在APP的InitInstance中开头加入如下代码
    HANDLE hMutex=::CreateMutex(NULL,TRUE,"FirstName");//FirstName可以随便取一个唯一的名字
    if (hMutex!=NULL)
    {
    if (GetLastError()==ERROR_ALREADY_EXISTS)
    {
    AfxMessageBox("已经有一个程序运行");
    return FALSE;
    }
    }
    以下为该函数的其余部分,略去一部份
    AfxEnableControlContainer();
    // Standard initialization
    // If you are not using these features and wish to reduce the size
    //  of your final executable, you should remove from the following
    //  the specific initialization routines you do not need.#ifdef _AFXDLL
    Enable3dControls(); // Call this when using MFC in a shared DLL
    #else
    Enable3dControlsStatic(); // Call this when linking to MFC statically
    #endif // Change the registry key under which our settings are stored.
    // TODO: You should modify this string to be something appropriate
    // such as the name of your company or organization.
    SetRegistryKey(_T("Local AppWizard-Generated Applications")); LoadStdProfileSettings();  // Load standard INI file options (including MRU) // Register the application's document templates.  Document templates
    //  serve as the connection between documents, frame windows and views. CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CTestDoc),
    RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    RUNTIME_CLASS(CTestView));
    AddDocTemplate(pDocTemplate); // Parse command line for standard shell commands, DDE, file open
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo); // Dispatch commands specified on the command line
    if (!ProcessShellCommand(cmdInfo))
    return FALSE;
           .........//略
      

  3.   

    在<<thinking in C++>>中有.
      

  4.   

    if(FindWindow(null,自己的窗口类))
       退出;
    else
       初始化;