我的界面上有个按钮,会激活另外的程序,如果这个应用程序没有启动,启动该程序。如果已经启动了,则将此程序跳到前台。我本来用FindWind(WNDCLASS, NULL)来查找相应窗口的。
但是现在的那个应用会自动生成一个afx:40000:...类名的窗口,类名在启动后会变化。请问哪位高手有办法吗?

解决方案 »

  1.   

    Use global named Mutex!!
    CreateMutex
      

  2.   

    在《VISUAL C++ 编程技巧》(多媒体与系统篇)有防止程序的多次启动的例子!你去看看吧!
    假设创建的是基于对话框的Single应用程序(指你要启动的程序)!
    为你的应用程序类CSingleInstanceApp添加一个私有成员作为互斥量的句柄
    private:
            HANDLE m_hMutex;
    然后修改函数InitInstance判断是否有其他实例在运行,有则退出。
    BOOL CSingleInstanceApp::InitInstance()
    {
    CString strClassName="SingleInstance";
        // 判断是否有一名为"SingleInstance"的mutex存在
        m_hMutex = OpenMutex (MUTEX_ALL_ACCESS, FALSE, strClassName) ;
        if (m_hMutex == NULL)
        {
          // m_hMutex不存在,表示没有其它实例在运行,创建一个m_hMutex
          m_hMutex = CreateMutex (NULL, TRUE, strClassName) ;
        }
        else
        {
          // 如果m_hMutex存在,表示已经有一个实例在运行,
          // 或者其它的程序创建了一个名为"SingleInstance"的m_hMutex
          ::AfxMessageBox("已经有一个实例在运行!",MB_OK|MB_ICONEXCLAMATION);
          // 结束程序
          return FALSE;
        }
    最后为应用程序类重载函数ExitInstance,在退出程序时释放互斥量。
    int CSingleInstanceApp::ExitInstance() 
    {
    if( m_hMutex != NULL )
    ReleaseMutex(m_hMutex); return CWinApp::ExitInstance();
    }