8.3 KiB
8.3 KiB
#qt
功能说明,参考Windows WMIC命令使用详解
新建一个QDialog的测试工程,默认mingw编译方式即可。 再添加一个WMIC的测试,C++文件对。
头文件
#ifndef WMIC_H
#define WMIC_H
#include <QObject>
namespace WMIC {
QString result(const QString& args);
QStringList list(const QString& args);
QString fingerprint();
/**
* SMBIOS 中的计算机系统产品信息
*
* UUID - 通用唯一识别码,这是一个在所有时间和空间中都保证是唯一的标识符;例如:03C00218-044D-05CE-6906-130700080009
*/
namespace CSPRODUCT {
QString UUID();
}
/**
* 已安装操作系统的管理
*
* Caption - 操作系统
* Version - 系统版本
*
*/
namespace OS {
QString Caption();
QString Version();
}
/**
* 图形处理单元,GPU信息
*
* Name - 显卡的名称;例如:NVIDIA GeForce GTX 1660 Ti
* AdapterCompatibility - 显卡制造商;例如:NVIDIA
* DeviceID - 显卡的设备标识符;例如:VideoController1
* AdapterRAM - 显卡的内存大小,以字节为单位;例如:4293918720
* DriverVersion - 当前安装的显卡驱动程序版本,例如:27.21.14.5671
*
*/
namespace GPU {
QString Name(); // 显卡名称:
QString AdapterCompatibility();
QString DeviceID();
QString AdapterRAM();
QString DriverVersion();
}
/**
* 处理器信息
*
* Name - 处理器的名称。
* ProcessorId - 唯一的处理器识符。
* NumberOfCores - 处理器的物理核心数量。
* NumberOfLogicalProcessors - 处理器的逻处理器数量,这可能包括超线程技术。
* Caption - CPU的具体型号和架构信息
* AddressWidth - 处理器的地址宽度,通常是 32 位或 64 位
*
*/
namespace CPU{
QString Name();
QString ProcessorId();
int NumberOfCores();
int NumberOfLogicalProcessors();
QString Caption();
int AddressWidth();
}
/**
* 网卡信息
* Name - 网卡名称
* MACAddress - MAC地址
*/
namespace NIC {
QString Name();
QString MACAddress();
}
/**
* 物理磁盘驱动器管理
*
* indexs - 物理磁盘序号列表
* Caption - 指定序号的磁盘信息
* Size - 指定序号的磁盘容量,以字节为单位
* SerialNumber - 指定序号的磁盘序列号
*/
namespace DISKDRIVE {
QList<int> indexs();
QString Caption(int index);
qint64 Size(int index);
QString SerialNumber(int index);
}
/**
* 计算机系统管理
* TotalPhysicalMemory - 总物理内存,以字节为单位
*/
namespace COMPUTERSYSTEM {
qint64 TotalPhysicalMemory();
}
}
#endif // WMIC_H
cpp文件
#include "wmic.h"
#include <QProcess>
#include <QDebug>
#include <QRegularExpression>
#include <QCryptographicHash>
QString WMIC::result(const QString &cmd)
{
static QRegularExpression re("\\s+");
QStringList args = cmd.split(re);
QProcess p;
p.start("wmic", args);
if(p.waitForFinished()){
p.readLine();
return p.readLine().simplified();
}else{
qWarning() << "WMIC.result.error:" << p.readAll();
return "";
}
}
QStringList WMIC::list(const QString &cmd)
{
static QRegularExpression re("\\s+");
QStringList args = cmd.split(re);
QProcess p;
p.start("wmic", args);
if(p.waitForFinished()){
p.readLine();
QStringList lines;
while(p.canReadLine()){
QString line = p.readLine().trimmed();
if(!line.isEmpty()){
lines.append(line);
}
}
return lines;
}else{
qWarning() << "WMIC.cmd.error:" << p.readAll();
return QStringList();
}
}
QString WMIC::CSPRODUCT::UUID()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("CSPRODUCT get UUID");
}
return _value;
}
QString WMIC::OS::Caption()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("OS get Caption");
}
return _value;
}
QString WMIC::OS::Version()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("OS get Version");
}
return _value;
}
QString WMIC::GPU::Name()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("path win32_videocontroller get Name");
}
return _value;
}
QString WMIC::GPU::AdapterCompatibility()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("path win32_videocontroller get AdapterCompatibility");
}
return _value;
}
QString WMIC::GPU::DeviceID()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("path win32_videocontroller get DeviceID");
}
return _value;
}
QString WMIC::GPU::AdapterRAM()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("path win32_videocontroller get AdapterRAM");
}
return _value;
}
QString WMIC::GPU::DriverVersion()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("path win32_videocontroller get DriverVersion");
}
return _value;
}
QString WMIC::CPU::Name()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("CPU get Name");
}
return _value;
}
QString WMIC::CPU::ProcessorId()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("CPU get ProcessorId");
}
return _value;
}
int WMIC::CPU::NumberOfCores()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("CPU get NumberOfCores");
}
return _value.toInt();
}
int WMIC::CPU::NumberOfLogicalProcessors()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("CPU get NumberOfLogicalProcessors");
}
return _value.toInt();
}
QString WMIC::CPU::Caption()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("CPU get Caption");
}
return _value;
}
int WMIC::CPU::AddressWidth()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("CPU get AddressWidth");
}
return _value.toInt();
}
QString WMIC::NIC::Name()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result(R"(nic where "PNPDeviceID like 'PCI%'" get Name)");
}
return _value;
}
QString WMIC::NIC::MACAddress()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result(R"(nic where "PNPDeviceID like 'PCI%'" get MACAddress)");
}
return _value;
}
QList<int> WMIC::DISKDRIVE::indexs()
{
static QList<int> _list;
if(_list.isEmpty()){
QStringList index_list = WMIC::list(R"(DISKDRIVE where "MediaType='Fixed hard disk media'" get Index")");
foreach (QString index, index_list) {
_list.append(index.toInt());
}
}
return _list;
}
QString WMIC::DISKDRIVE::Caption(int index)
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result(QString(R"(DISKDRIVE where "Index=%1" get Caption)").arg(index));
}
return _value;
}
qint64 WMIC::DISKDRIVE::Size(int index)
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result(QString(R"(DISKDRIVE where "Index=%1" get Size)").arg(index));
}
return _value.toLongLong();
}
QString WMIC::DISKDRIVE::SerialNumber(int index)
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result(QString(R"(DISKDRIVE where "Index=%1" get SerialNumber)").arg(index));
}
return _value;
}
qint64 WMIC::COMPUTERSYSTEM::TotalPhysicalMemory()
{
static QString _value;
if(_value.isEmpty()){
_value = WMIC::result("COMPUTERSYSTEM get TotalPhysicalMemory");
}
return _value.toLongLong();
}
QString WMIC::fingerprint()
{
static QString _value;
if(_value.isEmpty()){
QString uuid = WMIC::CSPRODUCT::UUID();
QCryptographicHash hash(QCryptographicHash::Md5);
hash.addData(uuid.toUtf8());
_value = hash.result().toHex();
}
return _value;
}
在默认dialog测试,windows内置的设备指纹即可
#include "dialog.h"
#include "ui_dialog.h"
#include "wmic.h"
#include <QDebug>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
qDebug()<<" WMIC::fingerprint():"<< WMIC::fingerprint();
}
Dialog::~Dialog()
{
delete ui;
}
打印输出,测试成功
运行测试,创建和读取正常