Часто приходится сталкиваться с проблемой когда случайно запускается вторая копия (уже скомпилированной) игры. В возможностьях 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; }
}