Часто приходится сталкиваться с проблемой когда случайно запускается вторая копия (уже скомпилированной) игры. В возможностьях GameMaker не никакого функционала что бы предотвратить данное событие. Поэтому я написал небольшое DLL расширение на c++ к мейкеру.
Суть его заключается в использовании функции CreateMutex: она используется для защиты общего ресурса от одновременного доступа несколькими потоками или процессами.
#define func extern "C" __declspec(dllexport)
#include <windows.h>
func double GM_CreateMutex(char* mu)
{
HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, mu);
if (hMutex == NULL)
{
hMutex = CreateMutex(0, 0, mu);
if (hMutex == NULL) { return -2; }
else { return 1; }
}
else { return -1; }
}