大家好,欢迎来到IT知识分享网。
电脑内存硬盘查看器[序列号和容量](C++、QT版本和Python、PySide2版本)
由于最近有人问我电脑查看内存卡序列号和硬盘序列号的方式,我告诉他用WMIC指令查看,结果人家告诉我麻烦,于是我就写了这么个小工具,下面附下载链接——免积分。
首先介绍一下原理,直接用代码调用cmd控制台执行多条指令(wmic)查询信息,然后将信息解析到界面输出。
1.WMIC查询指令
查询硬盘序列号:
wmic DiskDrive get serialnumber
查询硬盘容量:
wmic DiskDrive get Size /value
查询内存条序列号:
wmic Path Win32_PhysicalMemory get serialnumber
查询内存条容量:
wmic Path Win32_PhysicalMemory get Capacity /value
2.Python版本
先是用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__()<i+1: strT=u"获取磁盘容量失败" else: strT=diskVolume[i] printS=printS+u"\t 第"+str(i+1)+u"个磁盘序列号:"+snl+"\n" printS=printS+u"\t 第"+str(i+1)+u"个磁盘容量为:"+strT+"GB\n" i = i + 1 #内存信息 i=0; for snl in mSN: if memoryVolume.__len__()<i+1: strT=u"获取内存大小失败" else: strT=memoryVolume[i] printS = printS + "\t第"+str(i+1)+u"条内存条序列号:" + snl + "\n"; printS = printS + "\t第"+str(i+1)+u"条内存条大小为:" + strT + "GB\n"; i=i+1 self.ui.textBrowser.clear() self.ui.textBrowser.setText(printS) return # 函数名:获取内存序列号函数 # 功 能:获取内存序列号 # 输 入:无 # 输 出:返 回 - strList:内存条序列号 def getMermoryChipSerialId(self): import os result =os.popen("wmic memorychip get serialnumber").readlines(); print(result) rlist = [] for ax in result: if ax != '\n' and ax.find("SerialNumber")==-1: ax = ax.replace("Size=", "") ax = ax.replace("\n", "") rlist.append(ax) print(rlist) return rlist # 函数名:获取硬盘序列号函数 # 功 能:获取硬盘序列号 # 输 入:无 # 输 出:返 回 - strList:硬盘序列号 def getDiskSerialId(self): from wmi import WMI c = WMI() diskSerialList=[] snl="" # # 硬盘序列号 for physical_disk in c.Win32_DiskDrive(): snl = physical_disk.SerialNumber.replace("\n", "") snl = snl.replace(" ", "") diskSerialList.append(snl) return diskSerialList # 函数名:获取内存条容量函数 # 功 能:获取内存条容量 # 输 入:无 # 输 出:返 回 - strList:内存条容量 def getMemoryVolume(self): from os import popen result = popen("wmic Path Win32_PhysicalMemory get Capacity /value").readlines(); rlist = [] from pefile import long for ax in result: if ax != '\n': ax = ax.replace("Capacity=", "") ax = ax.replace("\n", "") axi = round(long(ax) / 1024 / 1024 / 1024) rlist.append(str(axi)) return rlist # 函数名:获取硬盘内存函数 # 功 能:获取硬盘内存 # 输 入:无 # 输 出:返 回 - strList:硬盘内存大小GB def getDiskVolme(self): from os import popen from pefile import long result = popen("wmic DiskDrive get Size /value").readlines(); rlist=[] for ax in result: if ax!='\n': ax=ax.replace("Size=","") ax=ax.replace("\n","") axi=round(long(ax)/1024/1024/1024) rlist.append(str(axi)) return rlist
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再写一个。
3.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; }
效果图
资源下载
- Python源码下载(码云下载)
- C++源码下载(码云下载)
- Python版本应用下载(码云下载 )
- C++版本应用下载(码云下载)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113823.html

