python 限制软件只能同时存在一个

代码:

import ctypes
import os

def CheckSoftwareIsRunning():
    mutex_name = "MyAppMutex"
    mutex = ctypes.windll.kernel32.CreateMutexW(None, False, mutex_name)
    if ctypes.windll.kernel32.GetLastError() == 183:  # ERROR_ALREADY_EXISTS
        ctypes.windll.kernel32.CloseHandle(mutex)
        return True
    return False

if __name__ == '__main__':
    try:
        if CheckSoftwareIsRunning():
            raise Exception("software is running.")
    except Exception as e:
        print(e)

解释:

这段代码用于在Windows系统上实现一个互斥体(Mutex)来限制软件只能运行一个实例。

  1. import os: 导入操作系统相关的模块,用于获取当前工作目录等信息。
  2. import ctypes: 导入 ctypes 模块,用于调用Windows系统的API函数。
  3. mutex_name = "MyAppMutex": 定义一个互斥体的名称。
  4. mutex = ctypes.windll.kernel32.CreateMutexW(None, False, mutex_name): 创建一个互斥体对象。CreateMutexW 是Windows API函数,用于创建一个互斥体。None 参数表示使用默认的安全设置,False 参数表示不共享互斥体。函数返回一个互斥体的句柄。
  5. ctypes.windll.kernel32.GetLastError(): 获取最近一次系统调用的错误代码。在这里用于检查是否互斥体已经存在。
  6. if ctypes.windll.kernel32.GetLastError() == 183: 检查错误代码是否为 183,即 ERROR_ALREADY_EXISTS,表示互斥体已经存在,即已经有另一个实例正在运行。
  7. ctypes.windll.kernel32.CloseHandle(mutex): 关闭互斥体的句柄,释放资源。

通过这段代码,你可以在Windows系统上确保只有一个实例在运行,防止多个实例同时运行造成冲突或资源浪费。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值