QT获取电脑系统,主板型号,CPU型号,硬盘型号,内存大小等相关信息(一)通过CMD和WMIC命令行的方式

QT通过CMD和WMIC命令行的方式获取电脑系统,主板型号,CPU型号,硬盘型号等相关信息,包括使用diskpart,wmic,DIrectX等

一、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;
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得鹿梦鱼、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值