当我运行一个程序的时候,我将判断是否存在该程序已经运行的进程。如果没有进程运行那我将运行我的程序,否则我将已运行的进程激活并弹出其对话框,该怎么做呢?
    就是在知道进程已经运行的情况下,如何弹出其运行的界面?

解决方案 »

  1.   

    HWND hWnd = FindWindow(...);
    ShowWindow(hWnd, SW_SHOW);
    BringWindowToTop(hWnd);
      

  2.   

    你可以创建一段内存映射文件
    第一个创建后,将自己的句柄写入
    第二个创建时,发现已经有人创建了。则读出句柄,激活程序,自己退出。我有成功的应用//共享内存,防止重新启动HANDLE hMem;           //共享内存句柄
    HWND* pData;            //共享内存分配的数据BOOL CreateShareMem();
    void CloseShareMem();BOOL CreateShareMem()
    {//创建共享内存,防止系统重复加载
      #define MEM_NAME "MCENTER"
      BOOL Reloaded=FALSE;  hMem=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,sizeof(HWND),MEM_NAME);
      if(hMem==NULL) return FALSE;
      if(GetLastError()==ERROR_ALREADY_EXISTS) Reloaded=TRUE;  pData=(HWND*)MapViewOfFile(hMem,FILE_MAP_WRITE,0,0,sizeof(HWND));
      if(pData==NULL)
      {
        CloseHandle(hMem);
        return FALSE;
      }  if(Reloaded) //如果是重复加载
      {
        HWND hWnd = *pData;
        WINDOWPLACEMENT wPlace;    wPlace.length=sizeof(wPlace);
        if(!GetWindowPlacement(hWnd,&wPlace))
        {
          Application->MessageBoxA("系统可能正在运行!",
            Application->Title.c_str(),MB_ICONINFORMATION);
          CloseShareMem();
          return FALSE;
        }
        if(wPlace.showCmd==SW_SHOWMINIMIZED) ShowWindow(hWnd,SW_RESTORE);
        SetForegroundWindow(hWnd);
        return FALSE;
      }
      else
      {
        *pData = Application->Handle;
        return TRUE;
      }
    }
    //---------------------------------------------------------------------void CloseShareMem()
    {//关闭共享内存
      UnmapViewOfFile(pData);
      CloseHandle(hMem);
    }
    //---------------------------------------------------------------------完