MFC中2种方式用互斥体函数避免多开

第一种方式(查找程序名)

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() 函数里面调用

上一篇:MFC学习记录二——GetLastError()报错信息查看


下一篇:MFC修改窗口图标