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!



Comments

Popular posts from this blog

Creating tray application and popup context menu in Windows

How to put an image to wxPanel using wxWidgets

How to build Xerces-c in Windows and Linux