bool ClassName::KillProcessFromName(QString ProcessName)
{
bool result = false;
QString str1;
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) ;
PROCESSENTRY32 pInfo;
pInfo.dwSize = sizeof(pInfo);
Process32First(hSnapShot, &pInfo);
do
{
str1 = (QString::fromUtf16(reinterpret_cast(pInfo.szExeFile)));
if (str1 == ProcessName)
{
result = true;
QString cmd;
cmd = QString("taskkill /F /PID %1 /T").arg(pInfo.th32ProcessID);
//![0]此方法很有效,但是会弹CMD的命令框
//system(cmd.toAscii());
//![0]
//![1]此方法很有效,解决了弹出CMD命令框的问题
QProcess *process = new QProcess;
process->start(cmd.toAscii());
//![1]
}
} while(Process32Next(hSnapShot, &pInfo) );
return result;
}
该代码段展示了如何在QT中通过进程名查找并终止进程。使用CreateToolhelp32Snapshot获取进程快照,遍历找到匹配的进程,然后通过QProcess无界面启动taskkill命令来结束目标进程。
5201

被折叠的 条评论
为什么被折叠?



