概述:
1.给大家分享个小案例,望日后开发上会对大家有所帮助;
2.使用Qt获取当前PC的详细信息,例如:pc主机名、当前ip地址(ipv4)、cpu ID、当前使用ip的 MAC地址等等;
3.案例背景是要用于软件授权加密使用;
代码示例:
.h:
#pragma once
#include <QString>
class GlobalApiClass
{
private:
GlobalApiClass();
~GlobalApiClass();
public:
static GlobalApiClass &GetInstance()
{
static GlobalApiClass instance;
return instance;
};
/*
* @brief:获取主机名称
*/
QString getUserName();
/*
* @brief:获取本机IP
*/
QString getAddIP();
/*
* @brief:获取本机MAC地址
*/
QString getHostMacAddress();
/*
* @brief:获取硬盘
*/
QString getDiskdrive();
/*
* @brief:获取本机IP地址
*/
QString getCpuID();
};
.cpp:
#include "GlobalApiClass.h"
#include <QProcess>
#include <QtNetWork/QHostInfo>
#include <QtNetWork/QHostAddress>
#include <QtNetWork/QNetworkInterface>
GlobalApiClass::GlobalApiClass()
{
}
GlobalApiClass::~GlobalApiClass()
{
}
QString GlobalApiClass::getUserName()
{
return QHostInfo::localHostName();
}
QString GlobalApiClass::getAddIP()
{
QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach(QHostAddress address, list)
{
if (address.protocol() == QAbstractSocket::IPv4Protocol)
//我们使用IPv4地址
return address.toString();
}
return 0;
}
QString GlobalApiClass::getHostMacAddress()
{
QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();// 获取所有网络接口列表
int nCnt = nets.count();
QString strMacAddr = "";
for (int i = 0; i < nCnt; i++)
{
// 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址
if (nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
{
strMacAddr = nets[i].hardwareAddress();
break;
}
}
return strMacAddr;
}
QString GlobalApiClass::getDiskdrive()
{
QProcess p(0);
p.start("wmic diskdrive get serialnumber");
p.waitForStarted();
p.waitForFinished();
QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
QStringList list = result.split("\r\n");
if (list.size() < 1)
return "error";
return list.at(1).trimmed();
}
QString GlobalApiClass::getCpuID()
{
QString cpu_id = "";
QProcess p(0);
p.start("wmic CPU get ProcessorID");
p.waitForStarted();
p.waitForFinished();
cpu_id = QString::fromLocal8Bit(p.readAllStandardOutput());
cpu_id = cpu_id.remove("ProcessorId").trimmed();
return cpu_id;
}
打印输出:
qDebug() <<QString::fromLocal8Bit("主机名:") << GlobalApiClass::GetInstance().getUserName();
qDebug() << QString::fromLocal8Bit("IP:")<< GlobalApiClass::GetInstance().getAddIP();
qDebug() << QString::fromLocal8Bit("硬盘ID:")<< GlobalApiClass::GetInstance().getDiskdrive();
qDebug() << QString::fromLocal8Bit("Mac地址:")<< GlobalApiClass::GetInstance().getHostMacAddress();
qDebug() << QString::fromLocal8Bit("cpu ID:")<< GlobalApiClass::GetInstance().getCpuID();
"主机名:" "RD-04"
"IP:" "192.168.1.1"
"硬盘ID:" "ZN18JXN8"
"Mac地址:" "C4:66:16:3A:09:56"
"cpu ID:" "BFEBFBFF000908ED"
拓展:
//获取cpu名称:wmic cpu get Name
//获取cpu核心数:wmic cpu get NumberOfCores
//获取cpu线程数:wmic cpu get NumberOfLogicalProcessors
//查询cpu序列号:wmic cpu get processorid
//查询主板序列号:wmic baseboard get serialnumber
//查询BIOS序列号:wmic bios get serialnumber
//查看硬盘:wmic diskdrive get serialnumber
over:
欢迎大家关注作者在文末评论、点赞、转发以及批评指正!
如果大家有更好的方法或有问题可以在文末评论一起讨论!
共同学习!
共同进步!
文末一句话:
不论荣辱,不论悲欢,皆是过往,多说无益,多想伤身。
共勉!