由于最近有人问我电脑查看内存卡序列号和硬盘序列号的方式,我告诉他用WMIC指令查看,结果人家告诉我麻烦,于是我就写了这么个小工具,下面附下载链接——免积分。
首先介绍一下原理,直接用代码调用cmd控制台执行多条指令(wmic)查询信息,然后将信息解析到界面输出。
查询硬盘序列号:
wmic DiskDrive get serialnumber
查询硬盘容量:
wmic DiskDrive get Size /value
查询内存条序列号:
wmic Path Win32_PhysicalMemory get serialnumber
查询内存条容量:
wmic Path Win32_PhysicalMemory get Capacity /value
先是用Python+PySide2写了一个。直接上代码:
CHeckSerialID.py
#encoding=utf-8
from PySide2.QtCore import QFile
from PySide2.QtGui import QIcon
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QWidget
class CheckSerialID(QWidget):
def __init__(self,parent=None):
super().__init__(parent=parent)
#加载界面文件QDesigner编写
self.uiFile=QFile("ui/CheckSerialID.ui")
self.uiFile.open(QFile.ReadOnly)
self.uiLoad=QUiLoader()
self.ui=self.uiLoad.load(self.uiFile)
#显示界面
self.ui.show();
#设置窗口标题
self.ui.setWindowTitle(u"小黄人硬盘内存查看器")
#设计窗口图标
appIcon = QIcon("ui/ico.png")
self.ui.setWindowIcon(appIcon)
#绑定按钮消息
self.ui.pushButton.clicked.connect(self.getButSlot)
##########################################################
#函数名:按钮槽函数
#功 能:响应按钮事件
#参 数:无
###########################################################
def getButSlot(self):
mSN= self.getMermoryChipSerialId()
dSN= self.getDiskSerialId()
memoryVolume=self.getMemoryVolume();
diskVolume=self.getDiskVolme()
printS=u"\t********一共有"+str(dSN.__len__())+u"个磁盘,"+str(mSN.__len__())+"条内存条********\n\n"
#磁盘信息
i=0;
strT=""
for snl in dSN:
if diskVolume.__len__()
main.py
from sys import exit
from PySide2.QtWidgets import QApplication
from CheckSerialID import CheckSerialID
if __name__=="__main__":
app=QApplication([])
w=CheckSerialID()
exit(app.exec_())
效果图:
由于Python发行打包后运行贼慢(大约双击后4s才显示界面)于是我准备用C++,QT再写一个。
直接上代码
#include "checkserialnumber.h"
/**********************************************************
*函数名:构造函数
*功 能:你说呢
*输 入:无
*输 出:无
***********************************************************/
CheckSerialNumber::CheckSerialNumber(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
setWindowTitle(QString::fromLocal8Bit("小黄人内存硬盘查看器"));
QIcon ico("ico.png");
setWindowIcon(ico);
Qt::WindowFlags m_flags = windowFlags();
setWindowFlags(m_flags | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);//背景透明
}
/**********************************************************
*函数名:析构函数
*功 能:你猜
*输 入:无
*输 出:无
***********************************************************/
CheckSerialNumber::~CheckSerialNumber()
{
}
/**********************************************************
*函数名:查询按钮槽函数
*功 能:调用下面查询函数查询并显示到界面
*输 入:无
*输 出:无
***********************************************************/
void CheckSerialNumber::on_pushButton_clicked()
{
QStringList MV= getMemoryV();
QStringList MSN = getMemorySN();
QStringList DSN = getDiskSN();
QStringList DV = getDiskV();
QString printS = "";
QString heardS = QString::fromLocal8Bit("\t********一共有%1个硬盘和%2条内存条********\n").arg(DSN.count()).arg(MSN.count());
printS = printS + heardS;
for (int i = 0; i < DSN.count(); i++)
{
printS = printS + QString::fromLocal8Bit("\t 硬盘%1序列号为:%2\n").arg(i+1).arg(DSN.at(i));
if (i >= DV.count())
printS = printS + QString::fromLocal8Bit("\t 硬盘%1的容量为:获取失败\n");
else
{
printS = printS + QString::fromLocal8Bit("\t 硬盘%1的容量为:%2G\n").arg(i+1).arg(DV.at(i));
}
}
for (int i = 0; i < MSN.count(); i++)
{
printS = printS + QString::fromLocal8Bit("\t内存条%1序列号为:%2\n").arg(i+1).arg(MSN.at(i));
if (i >= MV.count())
printS = printS + QString::fromLocal8Bit("\t内存条%1的容量为:获取失败\n");
else
{
printS = printS + QString::fromLocal8Bit("\t内存条%1的容量为:%2G\n").arg(i+1).arg(MV.at(i));
}
}
ui.textBrowser->clear();
ui.textBrowser->setText(printS);
}
/**********************************************************
*函数名:查询内存序列号函数
*功 能:查询内存序列号
*输 入:无
*输 出:返回 QStringList:内存序列号列表
***********************************************************/
QStringList CheckSerialNumber::getMemorySN()
{
QProcess p(0);
p.start("wmic Path Win32_PhysicalMemory get serialnumber");
p.waitForStarted();
p.waitForFinished();
QString result = "";
result = p.readAll();
result = result.remove("SerialNumber");
result = result.remove("\r");
result = result.remove(" ");
qint64 rv = 0;
QStringList listT;
QStringList resultList = result.split('\n', QString::SkipEmptyParts);
for (int i = 0; i < resultList.count(); i++)
{
if (resultList.at(i) != "")
{
listT.append(resultList.at(i));
}
}
return listT;
}
/**********************************************************
*函数名:查询内存容量
*功 能:获取内存容量
*输 入:无
*输 出:返回 QStringList:内存容量列表
***********************************************************/
QStringList CheckSerialNumber::getMemoryV()
{
QProcess p(0);
p.start("wmic Path Win32_PhysicalMemory get Capacity /value");
p.waitForStarted();
p.waitForFinished();
QString result = "";
result = p.readAll();
result = result.remove("Capacity=");
result = result.remove("\r");
qint64 rv = 0;
QStringList listT;
QStringList resultList = result.split('\n', QString::SkipEmptyParts);
for (int i = 0; i < resultList.count(); i++)
{
if (resultList.at(i) != "")
{
rv = resultList.at(i).toLongLong()/1024/1024/1024;
listT.append(QString::number(rv));
}
}
return listT;
}
/**********************************************************
*函数名:获取磁盘序列号函数
*功 能:获取磁盘序列号
*输 入:无
*输 出:返回 QStringList:获取磁盘序列号列表
***********************************************************/
QStringList CheckSerialNumber::getDiskSN()
{
QProcess p(0);
p.start("wmic DiskDrive get serialnumber");
p.waitForStarted();
p.waitForFinished();
QString result = "";
result = p.readAll();
result = result.remove("SerialNumber");
result = result.remove("\r");
result = result.remove(" ");
result = result.remove("Size=");
qint64 rv = 0;
QStringList listT;
QStringList resultList = result.split('\n', QString::SkipEmptyParts);
for (int i = 0; i < resultList.count(); i++)
{
if (resultList.at(i) != "")
{
listT.append(resultList.at(i));
}
}
return listT;
}
/**********************************************************
*函数名:获取磁盘容量函数
*功 能:获取磁盘容量
*输 入:无
*输 出:返回 QStringList:磁盘容量列表
***********************************************************/
QStringList CheckSerialNumber::getDiskV()
{
QProcess p(0);
p.start("wmic DiskDrive get Size /value");
p.waitForStarted();
p.waitForFinished();
QString result = "";
result = p.readAll();
result = result.remove("Size=");
result = result.remove("\r");
qint64 rv = 0;
QStringList listT;
QStringList resultList = result.split('\n', QString::SkipEmptyParts);
for (int i = 0; i < resultList.count(); i++)
{
if (resultList.at(i) != "")
{
rv = resultList.at(i).toLongLong() / 1024 / 1024 / 1024;
listT.append(QString::number(rv));
}
}
return listT;
}
/**********************************************************
*函数名:退出槽函数
*功 能:退出程序
*输 入:无
*输 出:无
***********************************************************/
void CheckSerialNumber::on_closeBtn_clicked()
{
this->close();
}
/**********************************************************
以下函数是为实现在无窗口边框情况下实现拖拽
***********************************************************/
void CheckSerialNumber::mousePressEvent(QMouseEvent* e)
{
if (e->button() == Qt::LeftButton)
{
this->windowPos = this->pos();
this->mousePos = e->globalPos();
this->dPos = mousePos - windowPos;
mBIsWindowMoveable = true;
}
}
void CheckSerialNumber::mouseMoveEvent(QMouseEvent*e)
{
if (mBIsWindowMoveable)
{
this->move(e->globalPos() - this->dPos);
}
}
void CheckSerialNumber::mouseReleaseEvent(QMouseEvent* e)
{
mBIsWindowMoveable = false;
}
效果图