能提供最有效和最方便的方法吗? 能不能给个链接···

解决方案 »

  1.   

    BOOL CxxxxApp::InitInstance()
    {
    HANDLE hMap=CreateFileMapping((HANDLE)0XFFFFFFFF,NULL,PAGE_READWRITE,0,128,WinText);
    if(hMap==NULL)
    {
    AfxMessageBox("失败",MB_OK|MB_ICONSTOP);
    return FALSE;
    }
    else if(GetLastError()==ERROR_ALREADY_EXISTS)
    {
    CloseHandle(hMap); 
    CWnd* pWnd=CWnd::FindWindow(NULL,WinText);
    if(pWnd!=NULL)
    {
    CWnd* pWndPopup=pWnd->GetLastActivePopup();
    pWnd->SetForegroundWindow();
    if(pWnd->IsIconic())
    pWnd->ShowWindow(SW_SHOWNORMAL);
    if(pWnd!=pWndPopup)
    pWndPopup->SetForegroundWindow();
    }   
    return FALSE;

    }
      

  2.   

    BOOL CDialogDemoDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
    CreateMutex(NULL, FALSE, "DialogDemoDlg");
    if(GetLastError()==ERROR_ALREADY_EXISTS)
    OnOK();
    ........
    }
      

  3.   

    同一时刻保证程序只有一个实例,使这个意思吗?如果是的话,可以通过互斥对象解决。如下
    BOOL C***App::InitInstance()
    {
    hMutexRun = CreateMutex(NULL, TRUE, "TEST_Mutex");
    if (hMutexRun !=NULL)
    if (GetLastError() == ERROR_ALREADY_EXISTS)
    {
    return FALSE;
    }
    ...
    }
    int C***App::ExitInstance() 
    {
    ReleaseMutex(hMutexRun);
    return CWinApp::ExitInstance();
    }
      

  4.   

    用FindWindow例如:
    HWND hWnd = ::FindWindow(YOUR_WINDOW_CLASS_NAME, NULL) //如果找不到,则返回NULL
    if (hWnd =! NULL)
       //... 你的程序已经运行了