qt Window 如何关闭指定的程序进程

代码部分

void GlobalTool::killProcess(QString processName) {
    qInfo() << "删掉进程" << processName;
    if (processName.isEmpty()) {
        qCritical() << "进程名为空";
        return;
    }

    HANDLE handle32Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (INVALID_HANDLE_VALUE == handle32Snapshot) {
        qCritical() << "创建搜索进程失败";
        return;
    }

    PROCESSENTRY32 pEntry;
    pEntry.dwSize = sizeof(PROCESSENTRY32);
    //Search for all the process and terminate it

    //首先获得第一个进程
    BOOL bProcess = Process32First(handle32Snapshot, &pEntry);
    //循环获得所有进程
    while (bProcess) {
        QString thisProcessName = QString::fromWCharArray(pEntry.szExeFile);
        if (thisProcessName == processName) {
            qInfo() << "找到目标进程";
            HANDLE handLe = OpenProcess(PROCESS_TERMINATE, FALSE, pEntry.th32ProcessID);
            if (handLe == NULL) {
                qCritical() << "没有打开目标进程";
                return;
            }
            BOOL ret = TerminateProcess(handLe, 0);
            qInfo() << "关闭目标进程是否成功:" << (ret ? "成功" : "失败");
        }
        bProcess = Process32Next(handle32Snapshot, &pEntry);
    }
    CloseHandle(handle32Snapshot);
}

CreateToolhelp32Snapshot 获取系统进程

官方讲解
这里的调用
是要包含所有的进程 并且第二个参数忽略表示
返回值
如果函数成功,它将返回指定快照的打开句柄。
不成功返回INVALID_HANDLE_VALUE

PROCESSENTRY32 描述采用快照时驻留在系统地址空间中的进程的列表中的条目

官方讲解

程序讲解

此程序是获取 快照中的所有进程名称再和指定名称进行对比 如果是指定名称就会先调用
OpenProcess 去打开已经打开的进程并获取进程的句柄
获取成功后调用TerminateProcess 去关闭指定的进程
可能程序中指定的进程不止一个 所有要循环遍历所有的进程再进行清理
关闭完所有的指定进程后 再调用CloseHandle 关闭这个快照进程句柄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值