救急啊!哪位大侠有在同一PC防止程序起动两次(即运行两个)的代码.多谢!

解决方案 »

  1.   

    引用别人的代码:可能对你有用。///////////////////////////////////////////////////////////////////
    //在你的app里设置这两个变量
    HANDLE hMutex;
    HANDLE hFileMap;
    //然后
    BOOL CYourProApp::InitInstance()
    {
      hMutex = CreateMutex(NULL,TRUE,"MutexApp");
      if(hMutex)
      {
        if(GetLastError() == ERROR_ALREADY_EXISTS)
        {
    HANDLE hMapFile;
    LPVOID lpMapAddress;
    hMapFile = OpenFileMapping   (FILE_MAP_ALL_ACCESS,FALSE,    "SharedMemory"); 
    lpMapAddress = MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,0);
    DWORD *pHwndData = (DWORD*)lpMapAddress;
    HWND hWnd = (HWND)(*pHwndData);
    SetForegroundWindow(hWnd);//设置程序到前台
    UnmapViewOfFile(hMapFile);
    return FALSE; }
    }
    hFileMap = CreateFileMapping((HANDLE)(0xFFFFFFFF),NULL,PAGE_READWRITE,0,1024,"SharedMemory");
    LPVOID lpData = MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,0,0,0);
    DWORD *pHwndData = (DWORD*)lpData;
    *pHwndData = (DWORD)YourMainWnd->m_hWnd;
    //以上一段代码的作用是将程序的句柄保存起来,留到以后调到前台
        // your other init code
       return TRUE;}//最后
    int CYourProApp::ExitInstance() 
    {
    CloseHandle(hMutex);
    CloseHandle(hFileMap);
    return CWinApp::ExitInstance();
    }
      

  2.   

    m_hMutex=CreateMutex(NULL,FALSE,"粮库考勤系统");
    if(GetLastError()==ERROR_ALREADY_EXISTS)
    {
    HWND hWnd=::FindWindow(NULL,"粮库考勤系统");
    if(hWnd)
    {
    if(::IsIconic(hWnd))
    ::ShowWindow(hWnd,SW_RESTORE);
    ::SetForegroundWindow(hWnd);
    ::SetForegroundWindow(::GetLastActivePopup(hWnd));
    }
    else
    MessageBox(NULL,"您的程序已经运行了","提示信息",MB_ICONINFORMATION);
    return FALSE;
    }
      

  3.   

    创建个互斥对象即可以了
    如下,(加到youapp的InitInstanc()中)
    HANDLE hObject = CreateMutex(NULL,FALSE,"LJPXYXC");
    if(GetLastError() == ERROR_ALREADY_EXISTS)
    {
    CloseHandle(hObject);
    AfxMessageBox("程序已经运行!");
    return FALSE;
    }
      

  4.   

    楼主啊,fieldwind(旷野之风)和Pipi0714(皮皮0714)的方法俺试过了,好用地~~~谢大侠~俺再好好琢磨琢磨
      

  5.   

    记得findwindow时要用the window’s title当参数,开始我就忽略这个了
      

  6.   

    创建互斥对象的思路比较好,比如fieldwind的