第一种方式(查找程序名)
HANDLE m_hMutex = CreateMutex(NULL,TRUE, "程序名"); if(GetLastError()==ERROR_ALREADY_EXISTS) { AfxMessageBox("此程序已经运行"); return FALSE; }
第二种方式(查找进程名)
const char *MutexObject = "test.exe"; //test.exe为进程名 hMutex = NULL; hMutex = ::CreateMutex(NULL,false,MutexObject); if(hMutex != NULL){ DWORD err = GetLastError(); if(err == ERROR_ALREADY_EXISTS) AfxMessageBox("此程序已经运行"); ::PostQuitMessage(0);//退出进程 }
这两种方式都必须要在程序未运行之前进行判断
在CXXXApp::InitInstance() 函数里面调用