if(GetLastError()==ERROR_ALREADY_EXISTS)
{
AfxMessageBox("妳已經打開了該程序");
exit(0);
return;
}
把上面的代碼加入到工程裏面的構造函數裏面。
原理是在windows內核創建壹個Mutex(互斥),根據創建的返回值判斷是否2重啟動。不管ERROR_ALREADY_EXISTS
::CreateMutex(NULL,TRUE,"MutexName");//創建壹個互斥,名字為"MutexName"
if(GetLastError()==ERROR_ALREADY_EXISTS)//判斷剛才發生了什麽錯誤。
//當第壹次啟動的時候,GetLastError()獲得的錯誤是ERROR_SUCCESS所以程序繼續運行。windows內核已經存在壹個名為"MutexName"的互斥.直到妳用ReleaseMutex("MutexName")語句釋放掉他,或者當前進程結束。
//當第二重啟動的時候,內核已經有壹個名為"MutexName"的互斥,所以創建會失敗,通過GetLastError()判斷上次失敗的原因是ERROR_ALREADY_EXISTS,證明已經有個進程存在,exit(0)是結束進程。
個人感覺上段代碼放在構造函數裏面比放在InitInstance函數內要好。