|
防止应用程序重复起动(VC++) Avoiding Multiple Application Instances 调用 HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName); 生成Mutex对象。因为Mutex对象的名字是唯一的,一旦一个Mutex对象存活时,同名的Mutex对象不可能生成。作为名字的lpName参数可以是任何字符串。不过为了与别的应用程序的Mutex对象名字不巧合重复,何以用GUID字符串生成工具做一个世界中独一无二的名字。CreateMutex()函数要在应用程序的开始部分装载。使用MFC的CWinApp派生类时,可以重载BOOL InitInstance();。在这个函数的开始位置调用CreateMutex()就可以了。 HANDLE m_hMutex;
...
BOOL CTestApp::InitInstance()
{
...
m_hMutex;= CreateMutex(NULL, TRUE, _T("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"));
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandlem_hMutex;
CWnd* pWnd = CWnd::FindWindow(NULL, _T("TestApplication"));
if (pWnd)
pWnd->SetForegroundWindow();
return FALSE;
}
...
}
2.释放Mutex对象。 在使用MFC的CWinApp派生类的場合,可以重载ExitInstance()函数,SDK的場合,可以在程序的最后, 释放掉Mutex对象。 int CTestApp::ExitInstance()
{
...
if (m_hMutex != NULL)
{
ReleaseMutex(m_hMutex);
CloseHandle(m_hMutex);
m_hMutex = NULL;
}
...
return CWinApp::ExitInstance();
}
|