#qt 功能说明,参考[[Windows WMIC命令使用详解]] 新建一个QDialog的测试工程,默认mingw编译方式即可。 再添加一个WMIC的测试,C++文件对。 头文件 ``` cpp #ifndef WMIC_H #define WMIC_H #include 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 indexs(); QString Caption(int index); qint64 Size(int index); QString SerialNumber(int index); } /** * 计算机系统管理 * TotalPhysicalMemory - 总物理内存,以字节为单位 */ namespace COMPUTERSYSTEM { qint64 TotalPhysicalMemory(); } } #endif // WMIC_H ``` cpp文件 ``` cpp #include "wmic.h" #include #include #include #include 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 WMIC::DISKDRIVE::indexs() { static QList _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内置的设备指纹即可 ``` cpp #include "dialog.h" #include "ui_dialog.h" #include "wmic.h" #include Dialog::Dialog(QWidget *parent) : QDialog(parent) , ui(new Ui::Dialog) { ui->setupUi(this); qDebug()<<" WMIC::fingerprint():"<< WMIC::fingerprint(); } Dialog::~Dialog() { delete ui; } ``` 打印输出,测试成功 ![[Pasted image 20240706173047.png]] 运行测试,创建和读取正常 ![[Pasted image 20240706182158.png]]