[vc++]枚举USB设备
2014-04-21 17:11
316 查看
#include <shlwapi.h> #pragma comment(lib,"shlwapi.lib") #include <setupapi.h> #pragma comment(lib,"setupapi.lib") /* * 函数名称: EnumUSBDev * 函数功能: 枚举设备 * 参 数: * acDevPath: 存放设备路径 * nDevNum: 设备数量 * 返 回 值: 成功返回TRUE,失败返回FALSE */ BOOL CEnumDevDlg::EnumUSBDev(OUT char acDevPath[MAX_PATH][MAX_PATH], OUT int &nDevNum) { //入参检测 nDevNum = 0; if (NULL == acDevPath) { return FALSE; } ZeroMemory(acDevPath, sizeof(acDevPath)); BOOL bRet = FALSE; SP_DEVICE_INTERFACE_DATA DeviceInterfaceData; // 保存设备接口信息 DWORD dwRequiredSize = 0; // 得到详细信息时需要的内存大小 PSP_INTERFACE_DEVICE_DETAIL_DATA pDeviceDetailData = NULL; // 详细信息 HDEVINFO hDeviceInfo; // 设备信息集合的指针 GUID InterfaceGUID = g_guidCdrom; DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); // // 1.枚举设备 // int i = 0; hDeviceInfo = SetupDiGetClassDevs( &InterfaceGUID, NULL, NULL, DIGCF_DEVICEINTERFACE|DIGCF_PRESENT); if (hDeviceInfo == INVALID_HANDLE_VALUE) { return FALSE; } while (1) { bRet = SetupDiEnumDeviceInterfaces(hDeviceInfo, NULL, &InterfaceGUID, i++, &DeviceInterfaceData); if(!bRet) { break; } // 下面需要得到Interface的详细信息 // 先得到详细信息需要的内存大小 bRet = SetupDiGetDeviceInterfaceDetail(hDeviceInfo, &DeviceInterfaceData, NULL, 0, &dwRequiredSize, NULL); if(bRet) { break; } // 为详细信息分配内存 if(pDeviceDetailData) { free(pDeviceDetailData); pDeviceDetailData = NULL; } pDeviceDetailData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(dwRequiredSize); if(pDeviceDetailData == NULL) { break; } // 得到Interface的详细信息 pDeviceDetailData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); SP_DEVINFO_DATA DeviceInfoData; DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); bRet = SetupDiGetDeviceInterfaceDetail( hDeviceInfo, &DeviceInterfaceData, pDeviceDetailData, dwRequiredSize, &dwRequiredSize, &DeviceInfoData); if ( !bRet ) { break; } strcpy(acDevPath[nDevNum], pDeviceDetailData->DevicePath); nDevNum++; } if(pDeviceDetailData) { free(pDeviceDetailData); pDeviceDetailData = NULL; } SetupDiDestroyDeviceInfoList(hDeviceInfo); return TRUE; } void CEnumDevDlg::OnButton1() { char acDevPath[MAX_PATH][MAX_PATH]; int nDevNum = 0; EnumUSBDev(acDevPath, nDevNum); for (int i = 0; i < nDevNum; i++) { MessageBox(acDevPath[i], NULL, MB_OK); } }
相关文章推荐
- usb mass storage设备枚举过程
- Windows下USB磁盘开发系列三:枚举系统中U盘、并获取其设备信息
- Linux USB Gadget--设备枚举
- 关于用vc来操作usb设备
- C#:USB设备枚举(五)生成TreeView数据源
- USB入门系列之六 —— USB设备的枚举过程
- vc获取windows设备枚举设备信息
- USB学习系列之三——USB设备的枚举
- C#:USB设备枚举(六)生成ListView数据源
- Windows下USB磁盘开发系列二:枚举系统中所有USB设备
- VC 识别USB HID设备
- USB入门系列之六 —— USB设备的枚举过程【转
- Windows下USB磁盘开发系列二:枚举系统中所有USB设备
- 浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过
- VC获取usb设备信息
- USB设备枚举/
- C#:USB设备枚举(七)WPF扩展方法
- 浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过程
- mini2440 usb device controller 驱动的分析--gadget设备(二)---枚举
- 枚举USB设备(代码)