Как жить в системе одному процессу С++. Данная программа позволит пресечь возможность запуска второго экземпляра программы. Тоесть, если программа уже запущена, то запустится 2 раз ей не удастся.
Функции CreateMutex() и ReleaseMutex().
Создается Mutex функцией CreateMutex():
HANDLE CreateMutex
(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // атрибут безопастности
BOOL bInitialOwner, // флаг начального владельца
LPCTSTR lpName // имя объекта
);
Результатом будет дескриптор объекта mutex, если такое имя есть, то дескпритор существующего. Функция GetLastError() при вызове будет выдавать ERROR_ALREADY_EXISTS.
Для освобождения объекта нужно вызвать функцию ReleaseMutex():
BOOL ReleaseMutex
(
HANDLE hMutex // дескриптор mutex
);
При успешном выполнении вернет ненулевое значение.
Пример:
#include “stdafx.h”
#include “windows.h”BOOL WeAreAlone (LPSTR szName)
{
HANDLE hMutex = CreateMutex (NULL, TRUE, szName);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMutex);
return FALSE;
}
return TRUE;
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
if (WeAreAlone (“qertsfhdfj”))
{
MessageBox (NULL,”WeAreAlone”,”WeAreAlone!”,MB_OK|MB_ICONERROR);
}
else
{
MessageBox (NULL,”Error”,”Error: app already running!”,MB_OK|MB_ICONERROR);
}
return 0;
}