• Qt实现的根据进程名来结束进程


    1、头文件及实现部分:

     1 #include <windows.h>
     2 #include <tlhelp32.h>
     3 #include   "psapi.h"
     4 #pragma   comment(lib,"psapi.lib")
     5 
     6 #include <QtCore/QCoreApplication>
     7 #include <QProcess>
     8 
     9 int TerminateProcess(QString ProcessName, QString sPathName = "")
    10 {
    11     int result = 0;
    12     QString processName;
    13 
    14     //提升进程权限
    15     HANDLE hToken;
    16     TOKEN_PRIVILEGES tkp;
    17     int n = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
    18     LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
    19     tkp.PrivilegeCount = 1;
    20     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    21     n = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
    22     CloseHandle(hToken);
    23 
    24     HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) ; 
    25     PROCESSENTRY32 pInfo; 
    26     pInfo.dwSize = sizeof(pInfo);
    27     Process32First(hSnapShot, &pInfo);
    28     do 
    29     {
    30         //遍历任务的所有进程
    31         processName = (QString::fromUtf16(reinterpret_cast<const unsigned short *>(pInfo.szExeFile)));
    32         if (processName == ProcessName) 
    33         {
    34             //找到该进程 取出pid
    35             int nPID = pInfo.th32ProcessID;
    36 
    37             //已知pid获取路径
    38             TCHAR wcPath[MAX_PATH] = {0};
    39             HANDLE hProcess = 0;
    40             hProcess = OpenProcess(PROCESS_ALL_ACCESS , FALSE, nPID);
    41             GetModuleFileNameEx(hProcess, NULL, wcPath, MAX_PATH);
    42             CloseHandle(hProcess);
    43             QString path = QString::fromUtf16(reinterpret_cast<const ushort *>(wcPath));
    44 
    45             //如果使用默认参数 直接根据进程名终止进程 否则根据程序路径结束
    46             if (sPathName.compare("") == 0 || path == sPathName)
    47             {
    48                 QString cmd;
    49                 cmd = QString("taskkill /F /PID %1 /T").arg(nPID);
    50                 QProcess p(0);
    51                 p.start(cmd);
    52                 p.waitForStarted();
    53                 p.waitForFinished();
    54                 result ++;
    55             }
    56         } 
    57     } while(Process32Next(hSnapShot, &pInfo)); 
    58     CloseHandle(hSnapShot);
    59     return result;
    60 }

    2、使用:

    int main(int argc, char *argv[])
    {
        //QCoreApplication a(argc, argv);
        TerminateProcess("QQ.exe");
        //return a.exec();
    }
  • 相关阅读:
    codevs 2632 非常好友
    codevs 1213 解的个数
    codevs 2751 军训分批
    codevs 1519 过路费
    codevs 1503 愚蠢的宠物
    codevs 2639 约会计划
    codevs 3369 膜拜
    codevs 3135 River Hopscotch
    数论模板
    JXOJ 9.7 NOIP 放松模拟赛 总结
  • 原文地址:https://www.cnblogs.com/hbcppcdr/p/6257212.html
Copyright © 2020-2023  润新知