1、exe本身只能运行一个
在主函数中添加
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//第一种防止程序重复启动的方法
HANDLE hMutex;
hMutex = CreateMutex(NULL, FALSE, TEXT("RunOnlyOneInstance"));
if (hMutex == NULL || ERROR_ALREADY_EXISTS == ::GetLastError())
{
MessageBoxEx(NULL, TEXT("The program is already running!"), TEXT("Error"), MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return FALSE;
}
//............
当然这个是只能判断exe本身,如果如果电脑上有几个名称一样的exe,同时运行是判断不了的,只能判断exe本身是否多次运行
或者换成
const std::string& processName = "主界面标题栏名称";
HANDLE tempMutex = CreateMutexA(NULL, TRUE, processName.c_str());
DWORD dwRet = GetLastError();
if (tempMutex)
{
if (ERROR_ALREADY_EXISTS == dwRet)
{
MessageBoxEx(NULL, TEXT("The program is already running!"), TEXT("Error"), MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
CloseHandle(tempMutex);
return true;
}
}
2、相同名称的exe只能运行一个
if (FindWindow(NULL, _T("主界面标题栏名称")))
{
MessageBoxEx(NULL, TEXT("The program is already running!"), TEXT("Error"), MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return FALSE;
}
这种是通过判断是否有一样名称exe运行,如果有就不在运行第二个