Qt程序只运行一个实例

该程序使用QSharedMemory检查是否存在已启动的应用,并通过QMessageBox提示用户确认是否关闭上一次执行的进程。如果用户选择关闭,它将利用QProcess执行taskkill命令来终止指定的进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <QSharedMemory>
#include <QMessageBox>
#include <QProcess>

int main(int argc, char *argv[])
{
    QSharedMemory shared("APP");//这个名字无所谓
    if(shared.attach()){
        int app_pid = 0;
        QMessageBox box;
        box.setStandardButtons(QMessageBox::Yes|QMessageBox::No);
        box.setText(QStringLiteral("程序已启动,是否关闭上一次执行程序"));
        if(box.exec() == QMessageBox::Yes){
            QProcess process;
            process.start("tasklist.exe /FI \"IMAGENAME eq app.exe\"");//这里把app换成工程文件.pro里面TARGET的值
            if(process.waitForFinished()){
            QByteArray result = process.readAll();
            int left = result.indexOf("Console",1);
            QByteArray m_temp = result.mid(left-6,5);
            QString m_str = m_temp;
            app_pid = m_str.replace(" ","").toInt();
            }
            QString cmd = QString("taskkill /F /PID %1 /T").arg(app_pid);
            process.execute(cmd);
        }else{
            exit(0);
        }
    }
    shared.create(1);
    QApplication a(argc, argv);
    Widget w;
    w.move(0,0);
    w.show();

    return a.exec();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值