获取电脑的硬盘属性(转速,类型(HDD,SSD))

参考的是老外技术论坛网站:https://stackoverflow.com/questions/23363115/detecting-ssd-in-windows

头文件.h

#pragma once
#include <QString>
#include <windows.h>
#include <string>//==============判断磁盘格式--获取到的是磁盘格式
void BuryPoint_GetDiskType(QStringList& disk_type);//==============判断硬盘类型()
//SpindleSpeed
//MediaType
//The Media Type gives you values:
//0 Unspecified
//3 HDD
//4 SSD
//5 SCM
void BuryPoint_GetDiskMediaType(QStringList& disk_media_type);class StorageDevice
{
public:StorageDevice() {};~StorageDevice() {};std::string  DeviceId;int BusType;int HealthStatus;int SpindleSpeed;int MediaType;
};

实现文件 .cpp

#include <刚才的头文件名>
#include <windows.h>
#include <string>
#include <iostream>
#include <windows.h>;
#include <Wbemidl.h>
#include <comdef.h>
#include <vector>
#pragma comment(lib, "wbemuuid.lib")
using namespace std;
void IntializeCOM()
{HRESULT hres;hres = CoInitializeEx(0, COINIT_MULTITHREADED);if (FAILED(hres)){cout << "Failed to initialize COM library. Error code = 0x" << hex << hres << endl;// Program has failed.}// Step 2: --------------------------------------------------// Set general COM security levels --------------------------hres = CoInitializeSecurity(NULL,-1,                          // COM authenticationNULL,                        // Authentication servicesNULL,                        // ReservedRPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  NULL,                        // Authentication infoEOAC_NONE,                   // Additional capabilities NULL                         // Reserved);if (FAILED(hres)){cout << "Failed to initialize security. Error code = 0x" << hex << hres << endl;CoUninitialize();             // Program has failed.}
}void SetupWBEM(IWbemLocator*& pLoc, IWbemServices*& pSvc)
{// Step 3: ---------------------------------------------------// Obtain the initial locator to WMI -------------------------HRESULT hres;//IWbemLocator *pLoc = NULL;hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)&pLoc);if (FAILED(hres)){cout << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << endl;CoUninitialize();}// Step 4: -----------------------------------------------------// Connect to WMI through the IWbemLocator::ConnectServer method//IWbemServices *pSvc = NULL;// Connect to the ROOT\\\microsoft\\windows\\storage namespace with// the current user and obtain pointer pSvc// to make IWbemServices calls.hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\microsoft\\windows\\storage"), // Object path of WMI namespaceNULL,                    // User name. NULL = current userNULL,                    // User password. NULL = current0,                       // Locale. NULL indicates currentNULL,                    // Security flags.0,                       // Authority (for example, Kerberos)0,                       // Context object &pSvc                    // pointer to IWbemServices proxy);if (FAILED(hres)){cout << "Could not connect. Error code = 0x" << hex << hres << endl;pLoc->Release();CoUninitialize();}// Step 5: --------------------------------------------------// Set security levels on the proxy -------------------------hres = CoSetProxyBlanket(pSvc,                        // Indicates the proxy to setRPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxxRPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxxNULL,                        // Server principal name RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxxNULL,                        // client identityEOAC_NONE                    // proxy capabilities );if (FAILED(hres)){cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl;pSvc->Release();pLoc->Release();CoUninitialize();}}void BuryPoint_GetDiskMediaType(QStringList& disk_media_type)
{IWbemLocator *wbemLocator = NULL;IWbemServices *wbemServices = NULL;IntializeCOM();SetupWBEM(wbemLocator, wbemServices);IEnumWbemClassObject* storageEnumerator = NULL;HRESULT hres = wbemServices->ExecQuery(bstr_t("WQL"),bstr_t("SELECT * FROM MSFT_PhysicalDisk"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&storageEnumerator);if (FAILED(hres)){//cout << "Query for MSFT_PhysicalDisk. Error code = 0x" << hex << hres << endl;wbemServices->Release();wbemLocator->Release();CoUninitialize();}IWbemClassObject *storageWbemObject = NULL;ULONG uReturn = 0;vector<StorageDevice> storageDevices;while (storageEnumerator){HRESULT hr = storageEnumerator->Next(WBEM_INFINITE, 1, &storageWbemObject, &uReturn);if (0 == uReturn || hr != S_OK){break;}StorageDevice storageDevice;VARIANT deviceId;VARIANT busType;VARIANT healthStatus;VARIANT spindleSpeed;VARIANT mediaType;storageWbemObject->Get(L"DeviceId", 0, &deviceId, 0, 0);storageWbemObject->Get(L"BusType", 0, &busType, 0, 0);storageWbemObject->Get(L"HealthStatus", 0, &healthStatus, 0, 0);storageWbemObject->Get(L"SpindleSpeed", 0, &spindleSpeed, 0, 0);storageWbemObject->Get(L"MediaType", 0, &mediaType, 0, 0);storageDevice.DeviceId = deviceId.bstrVal == NULL ? "" : _bstr_t(deviceId.bstrVal);storageDevice.BusType = busType.uintVal;storageDevice.HealthStatus = healthStatus.uintVal;storageDevice.SpindleSpeed = spindleSpeed.uintVal;storageDevice.MediaType = mediaType.uintVal;//cout << "storageDevice.MediaType " << storageDevice.MediaType;//SpindleSpeed//MediaType//The Media Type gives you values://0 Unspecified//3 HDD//4 SSD//5 SCMif (storageDevice.MediaType == 3){disk_media_type.append("HDD");}else if (storageDevice.MediaType == 4){disk_media_type.append("SSD");}storageDevices.push_back(storageDevice);storageWbemObject->Release();}
}

顺便图槽一句国内的论坛(不点名了)真的水,找了半天不知所云,还是老外的靠谱!

Windows获取电脑的硬盘属性(转速,类型(HDD,SSD))相关推荐

  1. C/C++:Windows获取电脑机器指纹

    介绍 很多时候我们需要为一台Windows设备生成一个机器指纹来标识一台设备.当然标识设备最好的是与硬件相关的标识,应该硬件一般不会被改变.笔者参考了获取设备唯一标识这篇博客.笔者将使用下面几个字段进 ...

  2. C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号

    C#获取电脑硬件信息(CPU ID.主板ID.硬盘ID.BIOS编号 http://www.cnblogs.com/liufei88866/archive/2010/05/11/1732671.htm ...

  3. 获取电脑唯一标识,硬盘序列号,主板序列号,CPU序列号

    在生产环境中,有时候会需要获取电脑唯一标识进行程序管理验证,比如一个程序,在A电脑上面只能允许正常登陆一年,到期后提示联系管理员等情况.就是获取电脑唯一标识后将该值存入授权数据库,默认给当前电脑的使用 ...

  4. python硬盘api-使用python获取电脑的磁盘信息方法

    使用Python获取电脑的磁盘信息需要借助于第三方的模块psutil,这个模块需要自己安装,纯粹的CPython下面不具备这个功能. 在iPython交互界面中进行如下演示: 查看电脑的磁盘分区: I ...

  5. linux怎么知道ping命令,教程方法;通过ping命令查看服务器类型(linux还是windows系列)电脑技巧-琪琪词资源网...

    琪琪词资源网-教程方法;通过ping命令查看服务器类型(linux还是windows系列)电脑技巧,以下是给大家带来的教程方法;通过ping命令查看服务器类型(linux还是windows系列),大家 ...

  6. Python获取电脑硬件配置的封装类,可以获取CPU序列号、主板序列号、BIOS序列号、硬盘序列号和网卡MAC地址

    Python获取电脑硬件配置的封装类,可以获取CPU序列号.主板序列号.BIOS序列号.硬盘序列号和网卡MAC地址. myPyHardware.py # -*- coding: utf-8 -*- i ...

  7. python 获取硬盘信息_使用python获取电脑的磁盘信息方法

    使用Python获取电脑的磁盘信息需要借助于第三方的模块psutil,这个模块需要自己安装,纯粹的CPython下面不具备这个功能. 在iPython交互界面中进行如下演示: 查看电脑的磁盘分区: I ...

  8. Windows下用Python获取电脑显示器物理尺寸和PPI

    Windows下用Python获取电脑显示器物理尺寸和PPI 背景 PPI 和 DPI Python获取PPI 方法一(WMI) 方法二(WINREG) 方法三(WMI+WINREG) 总结 背景 最 ...

  9. Windows 10 电脑加装固态硬盘时的分区显示状态良好(恢复分区)

    Windows 10 电脑加装固态硬盘时的分区显示状态良好(恢复分区) 如何删除恢复分区 1. 以管理员身份打开windows命令行 2. 输入disk disk回车会列出系统磁盘 3. 选择&quo ...

最新文章

  1. Design Pattern Quick Overview
  2. Python中的魔法属性
  3. BDTC 2019 | 15场分论坛,10分钟速览,5折票优惠,烧脑模式开启
  4. 图像处理之图像特征匹配
  5. day20 Python 高阶函数,函数,嵌套,闭包 装饰器
  6. bootstrap学习笔记(1)基础段落,表格的实现
  7. 实例构造函数与静态构造函数执行顺序
  8. 方差分析软件_手把手教你用Graphpad做单因素方差分析
  9. bootstarp怎么使盒子到最右边_疯狂搞机 | 联通IPTV盒子免拆安装第三方软件
  10. windows/OpenCV/VS/C++配置
  11. WindRiver WorkBench创建、编译vxWorks APP工程
  12. linux/windows对应的软件
  13. 向量积的坐标运算公式推导_向量外积的直接证明与直观解释,并以此证明正弦公式...
  14. 【Android游戏开发详细过程1】Android平台飞机大战游戏APP设计与实现
  15. 行驶证核验-行驶证核验查询-行驶证核验接口-行驶证核验查询接口-行驶证核验api接口-行驶证核验api
  16. EDAS系统上传稿件The font Arial-ItalicMT is not embedbed in the fille.(FAQ 109)解决
  17. 考试系统服务器 倒计时,考试系统倒计时实现
  18. Java实现 蓝桥杯VIP 算法提高 P0404
  19. JS 基础篇(音量调节器)
  20. 用计算机弹了,如何用计算器弹奏流行歌曲(图文教学),你需要学习了

热门文章

  1. iOS自动化打包 Jenkins+Gitlab+Fastlane+蒲公英+钉钉
  2. 2018年高二上12月月考总结暨2018年度总结、2019年规划
  3. 工作日记 day01
  4. go每日新闻--2020-03-06
  5. ROS入门(ROS安装+编译器配置)详细教程 ROSneotic安装 VScode的ROS开发环境的简单配置
  6. WinDbg调试:启动和退出
  7. python离线语音转文本_使用Python将语音转换为文本的方法
  8. Selenium自动化|爬取公众号全部文章,就是这么简单
  9. Android ViewPager简单实现 - 倒计时、引导页左右滑动
  10. python-opencv 第三讲 形态学处理