首页 新闻 会员 周边 捐助

Qt利用WMIC读取CPU序列号内容为空

0
悬赏园豆:5 [已解决问题] 解决于 2024-10-28 08:03

Qt6.5,大佬帮忙看看是哪里有问题:

QString Widget::getCpuProcessorId()
{
    QString cpuInfo;
#ifdef Q_OS_WIN
    QProcess process;
    process.start("wmic", QStringList() << "cpu" << "get" << "name");
    process.waitForFinished(); // 等待命令执行完毕
    cpuInfo = process.readAllStandardOutput();
#elif defined(Q_OS_LINUX)
    QFile file("/proc/cpuinfo");
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        while (!file.atEnd()) {
            QString line = file.readLine();
            if (line.startsWith("model name")) {
                cpuInfo = line;
                break;
            }
        }
        file.close();
    }
#endif
    return cpuInfo;
    // return getWMIC("wmic cpu get processorid");
}

我在cmd中实验是有输出的:

程序一直获取不到:

PixelKiwi的主页 PixelKiwi | 菜鸟二级 | 园豆:262
提问于:2024-10-22 15:03
< >
分享
最佳答案
0

我用你的代码是可以读到的.你可以把stdout和stderror都输出看看.或者下个断点看看cpuInfo是不是空.
cpuInfo = process.readAllStandardOutput();
cpuInfo += process.readAllStandardError();

收获园豆:5
www378660084 | 小虾三级 |园豆:1143 | 2024-10-22 15:23

嗯,不知道为什么,我在我笔记本上试也是正常输出的,诶,不用它了

PixelKiwi | 园豆:262 (菜鸟二级) | 2024-10-22 15:58

Output和Error都是空的😅

PixelKiwi | 园豆:262 (菜鸟二级) | 2024-10-22 16:01
其他回答(1)
0

在你的代码中,使用 WMIC 命令读取 CPU 的序列号可能出现问题。具体来说,WMIC cpu get name 命令是用来获取 CPU 的名称,而不是序列号。要获取 CPU 的序列号,你应该使用 wmic cpu get processorid 命令。以下是调整后的代码示例:

修改后的代码示例
cpp
复制代码
QString Widget::getCpuProcessorId()
{
QString cpuInfo;

ifdef Q_OS_WIN

QProcess process;
process.start("wmic", QStringList() << "cpu" << "get" << "processorid"); // 使用 processorid
process.waitForFinished(); // 等待命令执行完毕
cpuInfo = process.readAllStandardOutput().trimmed(); // 移除多余的空白字符

elif defined(Q_OS_LINUX)

QFile file("/proc/cpuinfo");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    while (!file.atEnd()) {
        QString line = file.readLine();
        if (line.startsWith("model name")) {
            cpuInfo = line.mid(line.indexOf(":") + 2).trimmed(); // 取出模型名称并移除空白
            break;
        }
    }
    file.close();
}

endif

return cpuInfo;

}
代码说明
Windows 部分:

修改了命令为 wmic cpu get processorid,以获取 CPU 的序列号。
使用 trimmed() 移除输出中的多余空白字符,以确保返回的字符串干净。
Linux 部分:

如果需要获取 CPU 的其他信息,可以继续处理 /proc/cpuinfo 的输出。
在获取模型名称时,使用 mid() 来提取真正的 CPU 名称。
注意事项
WMIC 工具:确保你的 Windows 系统中已启用 WMIC 工具,并且没有权限问题阻止读取硬件信息。
CPU 序列号的可用性:某些 CPU 可能不返回序列号或因系统设置限制而无法访问。
平台兼容性:确保你的程序在不同操作系统上测试,以确保其正常工作。
如果你希望通过其他方式获取 CPU 信息(如使用 Windows API),也可以考虑这些方法,但 WMIC 是一个相对简单的选择。

n1ce2cv | 园豆:362 (菜鸟二级) | 2024-10-27 00:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册