Как сделать приложение одиночку на winapi?
Приложение должно запускаться в одном экземпляре. Как это сделать с помощью разделяемой памяти? Если приложение уже загружено, то новый экземпляр должен закрыться, выкинув MessageBox.
Ответы (1 шт):
Автор решения: Виктор
→ Ссылка
Вот вариант LPSTR szName — некоторая определенная заранее константа, например
#define MY_PROGRAMM "MyApplication_<тут GUID сгенерированный для уникальности>"
HANDLE hMutex = NULL;
BOOL Alone (LPSTR szName)
{
hMutex = CreateMutex (NULL, TRUE, szName);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMutex);
return FALSE;
}
return TRUE;
}
С разделяемой памятью (есть свои особенности):
#pragma comment(linker, "/SECTION:.shr,RWS")
#pragma data_seg(".shr")
HWND hGlobal = NULL;
#pragma data_seg()
Если переменная hGlobal установлена, значит запущена копия
А если нет, то устанавливаем её и значит экземпляр запущен