进程名:
1.进程名如果不加 .exe后缀,与任务管理器中的不一致就会失败;
2. 对进程名大小写不敏感,大小写无所谓
命令参数需用引号隔开,否则不能识别
tasklist /FI命令结论:
1. 对于空格不敏感。无论是 tasklist/fi, tasklist /fi都可以;
2. 对于大小写不敏感,
tasklist /fi = TASKLIST /FI = tasklist /fi
imagename= IMAGENAME
示例进程名字 systime.exe = sysTime.exe
都不会报错
3. 后面的参数必须加引号;
4. 进程名必须和任务管理器中的名字一致,那里面如果有.exe后缀,此处命令中必须也有后缀。
验证通过的QT代码:
bool IfProcessIsRuning(const QString &appName)
{
#ifdef Q_OS_WIN //表示如果在windows下
qDebug()<< __FUNCTION__;
QProcess process;
process.start("tasklist" ,QStringList()<<"/FI"<<"imagename eq " +appName); //执行tasklist程序
//process.start("tasklist"); //执行tasklist程序----这种方式也行,只是后面读出来的内容有点多。
process.waitForFinished(5000); //阻塞5秒等待tasklist程序执行完成,超过五秒则直接返回
QString outputStr = QString::fromLocal8Bit(process.readAllStandardOutput()); //把tasklist程序读取到的进程信息输出到字符串中
if(outputStr.contains(appName))
{
process.close(); //用完记得把process关闭了,否则如果重新调用这个函数可以会失败
//qDebug()<<" OK, have found it!";
return true;
}
else
{
process.close();
//qDebug()<<" No, can't find it!";
return false;
}
#endif
}
网友评论