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运行,如果有就不在运行第二个
本文介绍了两种防止Windows应用程序多次启动的技术。一种是使用互斥量Mutex来限制同一个EXE文件仅能运行一个实例;另一种是通过查找窗口类名称,确保仅有相同主界面标题的应用实例运行。
336

被折叠的 条评论
为什么被折叠?



