只要这可怜的分了,问大家一个问题,请多帮助!VC中怎样让自己的程序只有一个实例运行???用户第二次起动程序时,怎样让已起动的程序自动的处于活动状态,并恢复原始的大小.请大家多帮忙.程序马上就要完工了,多谢各位支持,以后还请多帮助!!
哪日俺的水平高了,也来这儿和大家探讨.

解决方案 »

  1.   

    只让一个程序运行CMutex s_mutex(FALSE,"MyApp");
    CSingleLock* s_pSingleLock;BOOL CMyApp::InitInstance()
    {
    s_pSingleLock = new CSingleLock(&s_mutex);
    if(!s_pSingleLock->Lock(1)) return FALSE;
    s_pSingleLock->Unlock();
    s_pSingleLock->Lock();
    return TRUE;
    }
      

  2.   

    让以启动程序恢复用FindWindow找到已经启动程序的窗口, ShowWindow 让他显示就可以了。
      

  3.   

    实现程序互斥运行的几种方法http://www.xiaozhou.net/ReadNews.asp?NewsID=830
      

  4.   

    if(!s_pSingleLock->Lock(1)) return FALSE;  //这句的意思是说如果有一个实例运行的话就初始话失败是吗?FindWindow,
    怎样找到原来的哪个程序呀?
    FindWindow全局函数吗,还是在特定的地方可以用?我试一下谢谢!!!
      

  5.   

    添加一个这样的函数
    BOOL C*****App::FirstInstance()
    {
    CWnd *pWndPrev;
    pWndPrev = CWnd::FindWindow(NULL, _T("这里为窗口标题"));
    if(pWndPrev != NULL)
    {
    return FALSE;
    }
    else
    {
    return TRUE;
    }
    }然后在InitInstance里(放最前面)if( !FirstInstance() ) 
    {
    AfxMessageBox(_T("程序已经在运行了,请检查是否已被最小化到托盘!"));
    return   FALSE;  
    }
      

  6.   

    楼上的各位兄弟,以及即将看到这个帖的朋友们请再指导一个问题.
    CWnd *pWndPrev;
    pWndPrev = CWnd::FindWindow(NULL, _T("ZXSMAP"));
             pWndPrev->FlashWindow(true);  //小图标可以闪烁一下
             pWndPrev->ShowWindow(SW_SHOW);  //让窗口显示
                                  //当窗口最小化后可以让窗口显示到最前面
                                  //但当窗口处于非活动状态时,窗口怎样才能显示到最前面
                                  //用API,发送消息都可以
      

  7.   

    BOOL CEx1App::InitInstance(){               handle=::CreateMutex(NULL,FALSE,one);//handle为声明的HANDLE类型的全局变量        if(GetLastError()==ERROR_ALREADY_EXISTS)              {                      AfxMessageBox("应用程序已经在运行");               return FALSE;          }}4: