在窗口还没create时调用
ATOM g_atom;
bool therehaveone()
{
   g_atom = GlobalFindAtom("此处放你自已有特征的串,以免与其它程序重复!")
   if(g_atom==0)
      g_atom = GlobalAddAtom("此处放你自已有特征的串,以免与其它程序重复!");   }
   else 
     return true;
   return false;
}
千万不要忘了在程序退出前调用,
GlobalDeleteAtom(g_atom);
否则就嘿嘿....

解决方案 »

  1.   

    你的CreateProcess()是怎么调用的?能具体点吗?
      

  2.   

    thank you adrianx,再请教在座各位一个问题,如何在程序试图启动第2个
    实例时,自动激活第1个实例?
      

  3.   

    比较简单的方法就是广播一个消息,用SendMessage( HWND_BROADCAST,YOUR_MESSAGE_ID , wParam , lParam ),在你的程序中得到YOUR_MESSAGE_ID后激活已运行的程序就行了,就里要注意的是消息号要唯一,另外HWND_BROADCAST对不对还得你自己去看一看,下面借用一下adrianx的代码
    ATOM g_atom;
    bool therehaveone()
    {
      g_atom = GlobalFindAtom("此处放你自已有特征的串,以免与其它程序重复!")
      if(g_atom==0)
      {
          g_atom = GlobalAddAtom("此处放你自已有特征的串,以免与其它程序重复!");  }
      }
      else 
      {
        SendMessage( HWND_BROADCAST,ID_IM_RUNNING , NULL , NULL );    
        return true;
       }
      return false;
    }void XXX::OnImRunning()
    {
    //激活你的程序就可
    }对于CreateProcess应该说是不会出问题的,不过它那一大堆参数着实让人头痛,你可以找一下新出版的API参考大全看一下,里在有很详细的说明
      

  4.   

    其实进程运行以后就一直处于激活态,除非被挂起,所以准确的说问题3应该是激活该进程所对应的主窗口,而不是进程本身。你可以用SetForegroundWindow激活当前存在的窗口。
      

  5.   

    to CoolHg:
    YOUR_MESSAGE_ID;
    应该使用注册消息,
    UINT g_uYourMessage=RegisterWindowMessage(_T("此处放你自已有特征的串,以免与其它程序重复"));
    我认为自定义所有消都应该这么用,以该其它程序也采用这种方法,保证不是因为自已的程序导至兼容性的问题,
    void XXX::OnImRunning()
    {..}是不能用的
    应在最顶层的窗口中处理这个
    LPRESULT CMainFrame::WndProc(UINT message,WPARAM wParam,LPARAM lParam)
    {
       //...
       if(message==g_uYourMessage)
       {
        /..激活你的程序
        return 0;
        }
       return CFrameWnd::WndProc(message,wParam,lParam);
    }