因为项目需要,需要遍历设备管理器,找了很多资料,结果发现还是使用SetupAPI来实现比较靠谱,其本质是读取注册表的内容,当然也可以通过遍历注册表来实现,当然这样会比较麻烦。
/*********************************
* 枚举所有设备信息
* @int index[in] 枚举设备时的序号
* @LPTSTR lpDeviceClassName[out] 设备的Class,对应注册表中的Class的值
* @LPTSTR lpDeviceClassDesc[out] 设备描述,对应注册表的默认值
* @BOOL* bDevicePresent 设备是否存在
*********************************/
BOOL CGetComputerInfo::EnumDeviceClasses(int index,LPTSTR lpDeviceClassName,
LPTSTR lpDeviceClassDesc,BOOL* bDevicePresent)
{
BOOL bRet = FALSE;
GUID ClassGuid;
HDEVINFO hNewDeviceInfoSet = INVALID_HANDLE_VALUE;//设备信息集
int result;
BOOL bResNam = FALSE;
LPTSTR lpClassName = NULL;
HKEY hKeyClass = NULL;
ULONG RequiredSize = MAX_PATH;
WCHAR* name = NULL;
__try
{
ZeroMemory(&ClassGuid, sizeof(GUID));
//按index顺序枚举设备列表,获取设备UID
//对应