我想建立一个程序,如果程序已经运行则再运行时将程序置为当前激活状态,请问大家如何实现?

解决方案 »

  1.   

    现成的:http://search.csdn.net/Expert/topic/1060/1060291.xml?temp=.348385
      

  2.   

    // 创建互斥体对象
    HANDLE hMutex=CreateMutex(NULL, FALSE, "PMSVC 2005 0.0.0.1");
    // 如果本程序已有实例在运行,则GetLastError()返回ERROR_ALREADY_EXISTS
    if(GetLastError()==ERROR_ALREADY_EXISTS) 
    {
            CloseHandle(hMutex); //关闭互斥体对象句柄
    //获取桌面窗口的一个子窗口。
            HWND hWndPrev=::GetWindow(::GetDesktopWindow(),GW_CHILD);
            // 枚举当前窗口,查找本程序已运行的实例
    while(::IsWindow(hWndPrev))
    {
              //判断窗口是否有预先设置的属性"MutexDlg",
      //如有,则是要本程序已运行实例的窗口,并将它激活。
              if(::GetProp(hWndPrev,PROPNAME))
      {
                //如果主窗口已最小化,则恢复其大小。
                if (::IsIconic(hWndPrev))
    ::ShowWindow(hWndPrev,SW_RESTORE); //激活应用程序的主窗口
    ::SetForegroundWindow(hWndPrev);
    exit(0);//退出本实例
      }
      //继续寻找下一个窗口。
      hWndPrev = ::GetWindow(hWndPrev,GW_HWNDNEXT);
    }
            
    AfxMessageBox(theApp.GetStringFromResourceID(IDS_STRING_ALREADY_EXISTS_ERROR),MB_OK|MB_ICONINFORMATION,NULL);
    return FALSE; //退出本实例
    }