WIN 设备遍历

1.遍历win设备,需要使用的SetUpApi

头文件:SetupAPI.h

lib:setupapi.lib

2.使用方法如下:

a.HDEVINFO SetupDiGetClassDevs(CONST GUID *ClassGuid, PCWSTR Enumerator,HWND hwndParent,,DWORD Flags)

获取所有查询设备集合。 

classGuid 是需要查询的设备类guid;

Enumerator 是Pnp 设备分类(USB, USBSTOR等 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum 下面的分类;

hwndParent 直接使用NULL;

Flags 设置为DIGCF_ALLCLASSES时,GUID 设置将无效;

有如下设置:DIGCF_PRESENT、DIGCF_ALLCLASSES等。


b. BOOL SetupDiEnumDeviceInfo(HDEVINFO DeviceInfoSet, DWORD MemberIndex, PSP_DEVINFO_DATA DeviceInfoData)

获取设备集合中的第MemberIndex条数据


c. BOOL SetupDiGetDeviceRegistryProperty(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property,PDWORD PropertyRegDataType,PBYTE PropertyBuffer,DWORD PropertyBufferSize, PDWORD RequiredSize)

获取设备中某个属性。

d.SetupDiDestroyDeviceInfoList(HDEVINFO DeviceInfoSet) 释放设备集合


示例代码如下:

#include<iostream>
#include<windows.h>
#include<SetupAPI.h>
int main(char* argv, char* argvs[])

HDEVINFO devSet = SetupDiGetClassDevs(NULL, L"USB", NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES);
if (devSet == INVALID_HANDLE_VALUE)
{
return -1;
}
SP_DEVINFO_DATA device;
memset(&device, 0 , sizeof(SP_DEVINFO_DATA));
device.cbSize = sizeof(SP_DEVINFO_DATA);
DWORD index = 0;
while(SetupDiEnumDeviceInfo(devSet, index, &device))
{
index++;
DWORD dataT;
WCHAR* buffer = NULL;
DWORD bufferSize = 0;
SetupDiGetDeviceRegistryProperty(devSet, &device, SPDRP_HARDWAREID, NULL, NULL, bufferSize, &bufferSize);
buffer = new WCHAR[bufferSize/2];

memset(buffer , 0, bufferSize);
SetupDiGetDeviceRegistryProperty(devSet, &device, SPDRP_HARDWAREID, NULL,(PBYTE)buffer, bufferSize, &bufferSize);
wprintf(L"%s\n", buffer);


SetupDiGetDeviceRegistryProperty(devSet, &device, SPDRP_DEVICEDESC, NULL, NULL, bufferSize, &bufferSize);
buffer = new WCHAR[bufferSize/2];

memset(buffer , 0, bufferSize);
SetupDiGetDeviceRegistryProperty(devSet, &device, SPDRP_DEVICEDESC, NULL,(PBYTE)buffer, bufferSize, &bufferSize);
wprintf(L"%s\n", buffer);
delete buffer;

}
SetupDiDestroyDeviceInfoList(devSet);
return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值