建立一个公有的HANDLE ,如:信号量,事件,同步等,
有关请

解决方案 »

  1.   

    而且如果有个目录也叫“测试”的话,也不能运行,你可以把程序的窗口名字改为"测试ÿÿ"
    后面那两个字符为ALT+255
      

  2.   

    使用
    GlobalFindAtom
    GlobalAddAtom
    GlobalDeleteAtom
    在系统中建立一个你自己的标志,标志可取特别的,如“克林顿你这个混蛋,小布什你这个白痴,还有..."
      

  3.   

    MSVCer(家宝): 哈哈,那怎么行? 各位大侠,还有其它方法吗?
      

  4.   

    看MSDN吧!有三种方法,不过能激活窗口的应该还是用你的那种。可以考虑同时使用两种方法!
      

  5.   

    对不起,没说完。
    再检测原子是否存在来决定下一步。
    有关api:
             GlobalFindAtom
             GlobalAddAtom
             GlobalDeleteAtom
      

  6.   

    以前我问过,kenny_yuan的回答解决。你的程序应该如下:    HWND myhandle=FindWindow(NULL,"测试");//测试为我的应用程序的窗口名字
        if (myhandle!=NULL)   
        {  
          HWND hCurWnd = NULL;
          DWORD dwMyID;
          DWORD dwCurID;      hCurWnd = ::GetForegroundWindow();
          dwMyID = ::GetCurrentThreadId();
          dwCurID = ::GetWindowThreadProcessId(hCurWnd, NULL);
          ::AttachThreadInput( dwMyID, dwCurID, TRUE);
          ::SetForegroundWindow( myhandle );
          ::AttachThreadInput( dwMyID, dwCurID, FALSE);     }
      

  7.   

    呵呵,这种只判断窗口名称的办法太....了点吧???
    BOOL CMyApp::InitInstance()
    {
        CString m_pTitle;
        m_pTitle.LoadString(AFX_IDS_APP_TITLE);
        //防止应用运行多个实例
        ::CreateMutex (NULL,TRUE,m_pszExeName);
        if(GetLastError()==ERROR_ALREADY_EXISTS)
        {
    CWnd* pPrevWnd=CWnd::FindWindow (NULL,m_pTitle);
    if (pPrevWnd)
    {
           pPrevWnd->SetForegroundWindow ();
        pPrevWnd->GetLastActivePopup ()->SetForegroundWindow ();
    }
    return FALSE;
        }
        ......
    }
      

  8.   

    ::CreateMutex(NULL,TRUE,m_pszExeName);
    if (GetLastError()==ERROR_ALREADY_EXISTS)
    {
    // find out the previous application's main window.
    CWnd* pPrevWnd=CWnd::GetDesktopWindow()->GetWindow(GW_CHILD);
    while (pPrevWnd) {
    // does this window have the previous instance tag'set?
    if (::GetProp(pPrevWnd->GetSafeHwnd(),m_pszExeName)) {
    if (GetWindowLong(pPrevWnd->m_hWnd,GWL_STYLE) & WS_MINIMIZE)
    pPrevWnd->ShowWindow(SW_RESTORE);
    CWnd* pWnd=pPrevWnd->GetLastActivePopup();
    pWnd->SetForegroundWindow();
    return FALSE; // terminate the current instance
    }
    // did not find window, get next window in list.
    pPrevWnd=pPrevWnd->GetWindow(GW_HWNDNEXT);
    }
    TRACE("Could not find previous instance window!\n");
    AfxMessageBox("请稍等几秒钟,再尝试重新运行.");
    return FALSE;
    }