欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt_防止程序二次运行 实现应用单例

程序员文章站 2022-03-09 13:41:49
...
简述

思路如下
1.获取任务管理器的进程名称列表
2.获取自己exe的名称 进行比对 如果列表里超过两个 即退出运行

  • a.applicationFilePath().split("/").last()
代码

判断给定***.exe是否已运行 含Windows API

#include <windows.h>
#include "psapi.h"
#include <tlhelp32.h>

bool isRuning(QString strName)
{
    /*说明:判断进程是否已经存在运行实例 依赖WindowsAPI*/
    int i = 0;
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(pe32);
    HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if(hProcessSnap == INVALID_HANDLE_VALUE)
    {
        i += 0;
    }
    bool bMore = ::Process32First(hProcessSnap, &pe32);
    while(bMore)
    {
        QString strProcessName = QString::fromWCharArray(pe32.szExeFile);
        if(strProcessName == strName)
        {
            i++;
        }
        bMore = ::Process32Next(hProcessSnap, &pe32);
    }

    return (i > 1) ? true : false; //大于1,排除自身
}

测试

    QApplication a(argc, argv);
    if(isRuning(a.applicationFilePath().split("/").last()))
    {
        //弹窗提示进程已存在,不能重复启动
        QMessageBox::about(NULL, "错误", "请勿重复运行本程序!");
        return -1;
    }
相关标签: Qt qt5