C++ 获取所有USB设备 列举所有USB设备 列举所有USB HUB,有需要的朋友可以参考下。
最近在开发USB相关的内容,在此记录一下列举USB设备的代码(还可以列举USB HUB)。
由于直接使用系统定义的GUID有问题,所以在头文件中自己需要定义相关的GUID:
头文件代码如下(定义了USB DEVICE 和 USB HUB两种的GUID,如果其他请看msdn):
#pragma once #include "resource.h" #include <stdio.h> #include <windows.h> #include <SetupAPI.h> #include <iostream> #include <Usbiodef.h> #include <Usbioctl.h> #include <devguid.h> #include <winioctl.h> #include <INITGUID.h> #include <Dbt.h> #include <map> #include <wchar.h> #pragma comment(lib, "Winmm.lib") #pragma comment(lib, "setupapi.lib") DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE, 0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED); #define GUID_CLASS_USB_DEVICE GUID_DEVINTERFACE_USB_DEVICE DEFINE_GUID(GUID_DEVINTERFACE_USB_HUB, 0xf18a0e88, 0xc30c, 0x11d0, 0x88, 0x15, 0x00, 0xa0, 0xc9, 0x06, 0xbe, 0xd8); #define GUID_CLASS_USB_HUB GUID_DEVINTERFACE_USB_HUB
函数代码如下,代码中使用的GUID_CLASS_USB_HUB,可以用GUID_CLASS_USB_DEVICE来获取连接的所有USB设备:
void getDevices()
{
LPGUID lpGuid = (LPGUID)&GUID_CLASS_USB_HUB;//
int INTERFACE_DETAIL_SIZE = 1024;
int nCount = 0;
HDEVINFO info = SetupDiGetClassDevs(lpGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
//enumerate device information
DWORD required_size = 0;
int i;
SP_DEVINFO_DATA DeviceInfoData = { sizeof(DeviceInfoData) };
DWORD DataT;
DWORD buffersize = 1024;
DWORD req_bufsize = 0;
for (i = 0; SetupDiEnumDeviceInfo(info, i, &DeviceInfoData); i++)
{
WCHAR *did = new WCHAR[1024];
WCHAR *locid = new WCHAR[1024];
WCHAR *locdesc = new WCHAR[1024];
//get device description information
if (!SetupDiGetDeviceInstanceId(info, &DeviceInfoData, (PTSTR)did, buffersize, &req_bufsize))
continue;
if (!SetupDiGetDeviceRegistryPropertyW(info, &DeviceInfoData, SPDRP_LOCATION_PATHS, &DataT, (LPBYTE)locid, buffersize, &req_bufsize))
continue;
if (!SetupDiGetDeviceRegistryPropertyW(info, &DeviceInfoData, SPDRP_LOCATION_INFORMATION, &DataT, (LPBYTE)locdesc, buffersize, &req_bufsize))
continue;
}
SetupDiDestroyDeviceInfoList(info);
}
上述代码中,可以更改GUID来获取USB设备的信息。上述代码利用SetupDiGetDeviceInstanceID函数获取DeviceID,通过SetupDiGetDeviceRegistryPropertyW函数来获取相关属性,示例中获取了Location path和location Info,也可以获取其他的信息,相关信息都在
这里定义。
本文介绍了一段C++代码,用于枚举系统中的USB设备和USB Hub。通过定义特定的GUID并使用Windows API函数如SetupDiGetClassDevs、SetupDiGetDeviceInstanceId和SetupDiGetDeviceRegistryPropertyW,该代码能够获取USB设备的详细信息。
4824

被折叠的 条评论
为什么被折叠?



