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

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

最新文章

  1. MySQL数据迁移到MSSQL-以小米数据库为例-测试828W最快可达到2分11秒
  2. 使用正则表达式获取Sql查询语句各项(表名、字段、条件、排序)
  3. Freemarker中通过request获得contextPath
  4. iOS 开发 – 均衡代码职责
  5. java+ mysql 给所有的表添加假数据
  6. PHP json的插入和解析在数据库中的操作
  7. Android基于cordova3.3插件开发
  8. java 导出
  9. changXY
  10. ArcGis Python脚本——根据接图表批量裁切分幅影像
  11. Flask+Nginx+Supervisor+Gunicorn+HTTPS部署教程(CentOs)
  12. Django项目settings配置redis连接
  13. linux下后台启动springboot项目
  14. prometheus热重启
  15. java实体转json忽略属性
  16. Scala类的构造器与访问器
  17. Python complex() 函数
  18. Python基础之公共方法
  19. 使用存储过程将Oracle数据批量导出为多个csv文件
  20. .NET Core get started on Ubuntu 14.04

热门文章

  1. Devexpress使用经验1
  2. CodeForces 444C 分块
  3. oracle存储过程截取字符串
  4. (iOS) __block和__weak认识
  5. 第八章 springboot + mybatis + 多数据源
  6. java-集合4
  7. 自定义RadioButton样式
  8. 【BZOJ】3835: [Poi2014]Supercomputer
  9. Excel转Json,Json转CSharp
  10. 在MVC架构中使用CodeSmith生成NHibernate映射对象和实体类