在读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

相关文章:

  • 2022-01-21
  • 2021-11-24
  • 2021-12-14
  • 2022-01-06
  • 2022-01-15
猜你喜欢
  • 2021-12-03
  • 2022-12-23
  • 2021-12-25
  • 2022-12-23
  • 2021-10-12
  • 2022-01-02
  • 2021-09-07
相关资源
相似解决方案