Qt实现检测软件是否多开

Qt实现检测软件是否多开

在桌面软件开发中,软件通常要设置只允许存在一个进程,像一些熟知的音乐软件,QQ音乐这种。而这些软件在限制只有一个进程的同时,通常还会有双击桌面图标唤醒已运行的后台进程的功能。关于双击桌面唤醒已运行进程的方法,请看这篇文章:“还未完成”
本文中所介绍的各种方法,都基本遵循一个逻辑,即:
监测同一个资源,根据资源的占用情况,来决定是否能够启动。

平台特殊

操作系统提供了一些API供我们使用,所以接下来介绍一些使用特定系统API的方法。

windows

CreateMutex

image.png
具体API内容请看:MS Learn CreateMutexW
简单来讲,就是创建一个指定命名的互斥对象。当这个互斥对象已存在时,函数将会返回一个错误。

如果 lpName 与现有事件、信号量、可等待计时器、作业或文件映射对象的名称匹配,则函数将失败, GetLastError 函数返回 ERROR_INVALID_HANDLE

思路

通过这个错误,我们就能判断互斥对象创建成功还是失败,进一步根据创建结果去判断有没有实例正在运行。但是要注意一个点,在软件退出的时候,需要将软件启动时创建的互斥对象销毁掉。

代码
    HANDLE m_had = CreateMutex(NULL, TRUE, name.toStdWString().c_str());
    if (GetLastError() == ERROR_ALREADY_EXISTS){
   
        return false;
    }
    else{
   
        return true;
    }

	// 解锁
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值