C++すべてのUSBデバイスを取得すべてのUSBデバイスを列挙すべてのUSB HUBを列挙
最近、USB関連のコンテンツを開発していますが、ここではUSBデバイスを挙げるコード(USB HUBも挙げられます)を記録します.
システム定義のGUIDを直接使用するのは問題があるので、ヘッダファイルでは関連するGUIDを自分で定義する必要があります.
ヘッダファイルコードは以下の通りです(USB DEVICEとUSB HUBの2種類のGUIDが定義されています.その他はmsdnを参照してください).
関数コードは以下の通り、コードで使用されるGUID_CLASS_USB_HUB、GUIDが使えますCLASS_USB_DEVICEは、接続されたすべてのUSBデバイスを取得します.
上記コードでは、GUIDを変更してUSBデバイスの情報を取得することができます.上記のコードは、SetupDiGetDeviceInstanceID関数を用いてDeviceIDを取得し、SetupDiGetDeviceRegistryPropertyW関数を用いて関連属性を取得し、例ではLocation pathとlocation Infoを取得し、その他の情報を取得してもよい.関連情報はここで定義する.
システム定義のGUIDを直接使用するのは問題があるので、ヘッダファイルでは関連するGUIDを自分で定義する必要があります.
ヘッダファイルコードは以下の通りです(USB DEVICEとUSB HUBの2種類のGUIDが定義されています.その他はmsdnを参照してください).
#pragma once
#include "resource.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
関数コードは以下の通り、コードで使用される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を取得し、その他の情報を取得してもよい.関連情報はここで定義する.