请问怎么知道当前的程序是否已经有一个实例在运行,通过WinMain的第二个参数可以?

解决方案 »

  1.   

    CMutex * hMutex=(CMutex *)CreateMutex(NULL,FALSE,"RunOnlyOneInstance");
    if(hMutex == NULL || ERROR_ALREADY_EXISTS == ::GetLastError())
    {
                      //已有一个在运行了
    exit(0);
    }
      

  2.   

    WINMAIN的第二个参数早些时候就不能用了,至于为什么,我也不知道,反正没有效果
      

  3.   

    InitInstance()中加
    HWND oldHWnd = NULL;
    EnumWindows(EnumWndProc,(LPARAM)&oldHWnd);    //枚举所有运行的窗口
    if(oldHWnd != NULL)
    {
    AfxMessageBox("本程序已经在运行了");
    ::ShowWindow(oldHWnd,SW_SHOWNORMAL);          //激活找到的前一个程序
    ::SetForegroundWindow(oldHWnd);                //把它设为前景窗口
    return false;                                  //退出本次运行
    }
    OnInitDialog()中加
    SetProp(m_hWnd,g_szPropName,g_hValue);添加EnumWndProc窗口过程函数
    //添加的标识只运行一次的属性名
    CString  g_szPropName = "Your Prop Name";   //自己定义一个属性名
    HANDLE   g_hValue = (HANDLE)1;               //自己定义一个属性值
     
    BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
    {
    HANDLE h = GetProp(hwnd,g_szPropName);
    if( h == g_hValue)
    {
    *(HWND*)lParam = hwnd;
    return false;
    }
    return true;
    }