QT通过CMD和WMIC命令行的方式获取电脑系统,主板型号,CPU型号,硬盘型号等相关信息,包括使用diskpart,wmic,DIrectX等
目录导读
- 一、DIrectX诊断工具
- 打开窗体查看
- 命令行输出
- 二、 直接CMD输入SYSTEMiNFO
- 三、WMIC命令查询
- 1.获取系统盘符
- 2.获取系统版本
- 3.获取系统64\32位
- 4.获取主板型号
- 5.获取CPU型号
- 6.获取内存大小
- 7.获取硬盘型号
- 四、QT 使用 QProcess 获取返回值
- 五、QT 使查看GPU型号
- 六、QT 判断网络是否通畅
一、DIrectX诊断工具
通过使用DIrectX诊断工具来查询硬件信息
打开窗体查看
按下windows+R 输入diskmgmt.msc
显示电脑硬件信息
命令行输出
//cmd 输入查看具体的命令行信息
Dxdiag /?
导出诊断信息到txt或xml,例:
dxdiag /dontskip /whql:off /t D:\dxdiag_out.txt
dxdiag /dontskip /whql:off /x D:\dxdiag_out.xml
二、 直接CMD输入SYSTEMiNFO
通过systeminfo查询电脑系统,内存大小,启动盘符信息
三、WMIC命令查询
通过wmic查询电脑信息。通过wmic /?查询相关属性项,例:
1.获取系统盘符
Wmic OS get SystemDrive
2.获取系统版本
Wmic OS get Name
3.获取系统64\32位
wmic os get osarchitecture
4.获取主板型号
wmic BaseBoard get Product
5.获取CPU型号
wmic cpu get Name
6.获取内存大小
wmic ComputerSystem get TotalPhysicalMemory
7.获取硬盘型号
WMIC diskdrive get Model
四、QT 使用 QProcess 获取返回值
以获取 系统盘符为例:
QProcess Cmd;
Cmd.start("Wmic OS get SystemDrive");
Cmd.waitForFinished();
// 获取输出结果
QString result = QString::fromLocal8Bit(Cmd.readAllStandardOutput());
// 拆分指令字符串
QStringList list = result.split("\r\n");
QString letter="??";
if(list.count()>=2)
letter="当前系统盘符:"+list[1].replace("\r","").trimmed();
data=QVariant::fromValue(letter);
Cmd.close();
return (letter!="??" && letter !="");
五、QT 使查看GPU型号
/获取显卡型号
class LARGE_MODEL_EXPORT GPUV:public Subject
{
public:
SINGLETON(GPUV)
QString getObjName() override
{
return "GPUV";
}
///获取内存大小 异步操作
void getGPUVersion()
{
QtConcurrent::run([=]()
{
by_Api_CreateDXGIFactory();
///获取后通知所有观察对象
//notify();
});
}
private:
///通过windows api
bool by_Api_CreateDXGIFactory();
};
GPUV::GPUV() {}
GPUV::~GPUV() {}
#include <iostream>
#include <vector>
#include <dxgi.h>
#include <dxgi1_2.h>
#pragma comment(lib,"DXGI.lib")
QString stdWToQString(const std::wstring &str)
{
#ifdef _MSC_VER
return QString::fromUtf16((const ushort *)str.c_str());
#else
return QString::fromStdWString(str);
#endif
}
bool GPUV::by_Api_CreateDXGIFactory()
{
// 定义参数
IDXGIFactory * pFactory;
IDXGIAdapter * pAdapter;
std::vector <IDXGIAdapter*> vAdapters;
int iAdapterNum = 0;
// 创建一个DXGI工厂
HRESULT hr = CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)(&pFactory));
if (FAILED(hr))
return false;
// 枚举适配器
while (pFactory->EnumAdapters(iAdapterNum, &pAdapter) != DXGI_ERROR_NOT_FOUND)
{
vAdapters.push_back(pAdapter);
++iAdapterNum;
}
QString description="??";
if(iAdapterNum>0)
{
DXGI_ADAPTER_DESC adapterDesc;
vAdapters[0]->GetDesc(&adapterDesc);
std::wstring aa(adapterDesc.Description);
description = stdWToQString(aa);
}
vAdapters.clear();
if(description!="" && description!="??")
{
data=QVariant::fromValue(description);
return true;
}
else
return false;
}
六、QT 判断网络是否通畅
#include <QLibrary>
typedef bool(*ConnectFun)(int* lpdwFlags, int dwReserved);
NetIswork::NetIswork() {}
NetIswork::~NetIswork() {}
bool NetIswork::CheckIsNetworkWorking()
{
QLibrary lib("Wininet.dll");
if (lib.load())
{
bool bOnline = false;//是否在线
int flags;
//获取dll库中的函数InternetGetConnectedState函数地址`
ConnectFun myConnectFun = (ConnectFun)lib.resolve("InternetGetConnectedState");
//判断是否连网
bOnline = myConnectFun(&flags, 0);
data=QVariant::fromValue(bOnline);
return bOnline;
}
return false;
}