一.前言
楼主在工作开发中遇到过有些客户想软件开启之后就获取当前电脑的一些硬件设备信息,然后显示到界面上,今天楼主将这部分抽离,以此做一个记录,该文章主要是获取cpu信息以及硬盘序列号
二.实现
主要使用利用wmic和QProcess来实现,QProcess获取wmic的执行结果,然后进行解析
1.获取cpu信息
void Widget::getCpuInfo()
{
QProcess p1;
p1.start("wmic cpu get name");
p1.waitForFinished();
QString res1 = QString::fromLocal8Bit(p1.readAllStandardOutput());
qDebug()<<"cpu名称:"<<res1;
QProcess p2;
p2.start("wmic cpu get NumberOfCores");
p2.waitForFinished();
QString res2 = QString::fromLocal8Bit(p2.readAllStandardOutput());
qDebug()<<"cpu核心数:"<<res2;
QProcess p3;
p3.start("wmic cpu get NumberOfLogicalProcessors");
p3.waitForFinished();
QString res3 = QString::fromLocal8Bit(p3.readAllStandardOutput());
qDebug()<<"cpu线程:"<<res3;
QProcess p4;
p4.start("wmic cpu get NumberOfLogicalProcessors");
p4.waitForFinished();
QString res4 = QString::fromLocal8Bit(p4.readAllStandardOutput());
qDebug()<<"cpu序列号:"<<res4;
}
2.获取应硬盘序列号
QProcess p5;
p5.start("wmic diskdrive get serialnumber");
p5.waitForFinished();
QString res5 = QString::fromLocal8Bit(p5.readAllStandardOutput());
qDebug()<<"硬盘序列号:"<<res5;
3.打印其中cpu的名字,信息如下
这种肯定不是我们想要的显示,因此我们需要解析,通过分析可知
1)数据中含有较多\r以及\n以及空格,所以可以用来作为分割标志或者直接替换掉,可能没啥用处
经过试验和分析,于是就有以下的处理逻辑
void Widget::fixInfo(QString str)
{
// \r \n 去除
str.remove("\r");
str.remove("\n");
// 去除多余的空格
QStringList list = str.split(" ");
QStringList objList;
for(int i=0;i<list.count();i++)
{
if(list[i]!=" "&& list[i]!="")
{
objList.append(list[i]);
}
}
// 重新组合
qDebug()<<objList.join(" ");
}
效果对比
QProcess p1;
p1.start("wmic cpu get name");
p1.waitForFinished();
QString res1 = QString::fromLocal8Bit(p1.readAllStandardOutput());
qDebug()<<"cpu名称:"<<res1;
fixInfo(res1);
,