SetupDi 获取设备信息的两个方法
2017-07-25 10:04
239 查看
#include "stdio.h" #include <Windows.h> #include <setupapi.h> #pragma comment(lib, "setupapi.lib") void PrintDevicesInfo1() { HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES); if (hDevInfo == INVALID_HANDLE_VALUE) { printf("SetupDiGetClassDevs Err:%d", GetLastError()); return ; }; SP_CLASSIMAGELIST_DATA sp_ImageData = {0}; sp_ImageData.cbSize = sizeof(SP_CLASSIMAGELIST_DATA); SetupDiGetClassImageList(&sp_ImageData); short wIndex = 0; SP_DEVINFO_DATA spDevInfoData = {0}; spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); while (1) { if (SetupDiEnumDeviceInfo(hDevInfo, wIndex, &spDevInfoData)) { TCHAR szBuf[MAX_PATH] = {0}; int wImageIdx = 0; short wItem = 0; if (!SetupDiGetDeviceRegistryPropertyA(hDevInfo, &spDevInfoData, SPDRP_CLASS, NULL, (PBYTE)szBuf, MAX_PATH, 0)) { wIndex++; continue; }; if (SetupDiGetClassImageIndex(&sp_ImageData, &spDevInfoData.ClassGuid, &wImageIdx)) { char szName[MAX_PATH] = {0}; DWORD dwRequireSize; // if (!SetupDiGetClassDescription(&spDevInfoData.ClassGuid, szBuf, MAX_PATH, &dwRequireSize)) { wIndex++; continue; }; printf("Class:%s\r\n", szBuf); if (SetupDiGetDeviceRegistryProperty(hDevInfo,&spDevInfoData, SPDRP_FRIENDLYNAME, NULL, (PBYTE)szName, MAX_PATH - 1, 0)) { printf("Device:%s\r\n\r\n", szName); } else if (SetupDiGetDeviceRegistryProperty(hDevInfo,&spDevInfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)szName, MAX_PATH - 1, 0)) { printf("Device:%s\r\n\r\n", szName); }; }; } else break; wIndex++; }; SetupDiDestroyClassImageList(&sp_ImageData); } int PrintDevicesInfo2() { HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i; // 得到所有设备 HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, 0, 0, DIGCF_PRESENT | DIGCF_ALLCLASSES ); if (hDevInfo == INVALID_HANDLE_VALUE) return 0; // 循环列举 DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++) { char szClassBuf[MAX_PATH] = { 0 }; char szDescBuf[MAX_PATH] = { 0 }; // 获取类名 if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_CLASS, NULL, (PBYTE)szClassBuf, MAX_PATH - 1, NULL)) continue; //获取设备描述信息 if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)szDescBuf, MAX_PATH - 1, NULL)) continue; printf("Class:%s\r\nDesc:%s\r\n\r\n", szClassBuf, szDescBuf); if (strcmp(szClassBuf, _T("Display")) == 0) { printf("Class:%s\r\n Desc:%s\r\n\r\n", szClassBuf, szDescBuf); } } // 释放 SetupDiDestroyDeviceInfoList(hDevInfo); return 0; }
相关文章推荐
- C#中各类获取设备存储信息的各类方法
- Android 7.0开发获取存储设备信息的方法
- iOS 获取设备的各种信息的方法
- Android通过反射的方法获取手机存储设备的状态信息
- Android中获取设备信息的方法
- 二,iOS部分获取设备信息的方法
- 电脑安装了金山毒霸,手机连接电脑,输入adb devices 无法获取设备信息的解决方法
- 获取WP7设备信息的方法
- 获取ios设备系统信息的方法 之 [UIDevice currentDevice]
- iOS获取设备全局信息方法总结(如信号,电量,设备标示)
- j2me学习笔记【2】——利用Display类的isColor()方法获取设备是否支持彩色的信息
- ios获取设备信息方法
- 超全的iOS各种设备信息获取方法总结(包括iPhone8/iPhone X)
- 苹果设备相关信息获取方法
- iOS获取设备全局信息方法总结(如信号,电量,设备标示)
- C#中各类获取设备存储信息的各类方法
- iOS获取当前设备WiFi信息的方法
- [iOS]iOS获取设备信息常用方法
- JS获取访问设备信息的方法
- iOS获取设备全局信息方法总结(如信号,电量,设备标示)