MFC: How to limit application instance or not allow multiple instance of the same application
1. Create the class
#ifndef LimitSingleInstance_H
#define LimitSingleInstance_H
#include<windows.h>
//This code is from Q243953 in case you lose the article and wonder
//where this code came from.
class CLimitSingleInstance
{
protected:
DWORD m_dwLastError;
HANDLE m_hMutex;
public:
CLimitSingleInstance(TCHAR *strMutexName)
{
//Make sure that you use a name that is unique for this application otherwise
//two apps may think they are the same if they are using same name for
//3rd parm to CreateMutex
m_hMutex = CreateMutex(NULL, FALSE, strMutexName); //do early
m_dwLastError = GetLastError(); //save for use later...
}
~CLimitSingleInstance()
{
if (m_hMutex) //Do not forget to close handles.
{
CloseHandle(m_hMutex); //Do as late as possible.
m_hMutex = NULL; //Good habit to be in.
}
}
BOOL IsAnotherInstanceRunning()
{
return (ERROR_ALREADY_EXISTS == m_dwLastError);
}
};
#endif
2. Add the file in the header to where the app instance is located
#include "SingleLimitInstance.h"
3. Instantiate an instance of the class
CLimitSingleInstance g_SingleInstanceObj(TEXT("MY_UNIQUE_APPLICATION_STRING"));
CxxxApp theApp;
4. Inside the xxx::InitInstance() function add the code before anything else
BOOL xxx::InitInstance()
{
if (g_SingleInstanceObj.IsAnotherInstanceRunning())
return FALSE;
//more codes after this...
}
That's it!
#ifndef LimitSingleInstance_H
#define LimitSingleInstance_H
#include<windows.h>
//This code is from Q243953 in case you lose the article and wonder
//where this code came from.
class CLimitSingleInstance
{
protected:
DWORD m_dwLastError;
HANDLE m_hMutex;
public:
CLimitSingleInstance(TCHAR *strMutexName)
{
//Make sure that you use a name that is unique for this application otherwise
//two apps may think they are the same if they are using same name for
//3rd parm to CreateMutex
m_hMutex = CreateMutex(NULL, FALSE, strMutexName); //do early
m_dwLastError = GetLastError(); //save for use later...
}
~CLimitSingleInstance()
{
if (m_hMutex) //Do not forget to close handles.
{
CloseHandle(m_hMutex); //Do as late as possible.
m_hMutex = NULL; //Good habit to be in.
}
}
BOOL IsAnotherInstanceRunning()
{
return (ERROR_ALREADY_EXISTS == m_dwLastError);
}
};
#endif
2. Add the file in the header to where the app instance is located
#include "SingleLimitInstance.h"
3. Instantiate an instance of the class
CLimitSingleInstance g_SingleInstanceObj(TEXT("MY_UNIQUE_APPLICATION_STRING"));
CxxxApp theApp;
4. Inside the xxx::InitInstance() function add the code before anything else
BOOL xxx::InitInstance()
{
if (g_SingleInstanceObj.IsAnotherInstanceRunning())
return FALSE;
//more codes after this...
}
That's it!
Comments
Post a Comment