c++防止客户端多开巧妙代码

在读OBS源码时看到一个比较有意思的关于防止用户多开程序的写法,简单有效,记录下

    //make sure only one instance of the application can be open at a time
#define OBS_WINDOW_CLASS         TEXT("OBSWindowClass")
    HANDLE hOBSMutex = CreateMutex(NULL, TRUE, TEXT("OBSMutex"));
    if(GetLastError() == ERROR_ALREADY_EXISTS)// 如果已有互斥量存在 这里GetLastError则是CreateMutex的Error
    {
        hwndMain = FindWindow(OBS_WINDOW_CLASS, NULL);//获取该窗体句柄
        if(hwndMain)
            SetForegroundWindow(hwndMain);//设置焦点到程序窗口

        CloseHandle(hOBSMutex);//互斥量存在释放句柄并复位互斥量
        return 0;
    }

这里他CreateMutex创建一个互斥体,当第一次执行程序时创建成功,第二次执行程序时则CreateMutex会失败,此时设置程序焦点到已经开启的程序。    end

原文地址:https://www.cnblogs.com/duguxue/p/5231371.html