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 的动态二维数组创建方法
下一篇: .Net Core异步编程