根据VID PID获取USB设备路径
来源:互联网 发布:阿里在线编程测验作弊 编辑:程序博客网 时间:2024/06/13 22:42
#include <wtypes.h>#include <setupapi.h>#pragma comment(lib, "setupapi.lib")BOOL EnumUSBDevice(WORD uVID, WORD uPID, //USB VID PID BOOL bPresentFlag, //设备必须存在标志 0不需要插入设备 TCHAR szDevPath[MAX_PATH+1] = NULL, //设备路径 int iIndex=0) //第N个设备 (对多个相同的设备进行区分){ BOOL bRet = FALSE; int iFoundCount = 0; //查找到匹配设备个数 // DWORD dwFlage = DIGCF_ALLCLASSES|DIGCF_DEVICEINTERFACE; if(bPresentFlag) dwFlage |= DIGCF_PRESENT; HDEVINFO hdev = SetupDiGetClassDevs(NULL, NULL, NULL, dwFlage); if (INVALID_HANDLE_VALUE != hdev) { SP_DEVINFO_DATA DeviceInfoData = {0}; DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); DWORD DeviceIndex = 0; while (SetupDiEnumDeviceInfo(hdev, DeviceIndex, &DeviceInfoData)) { DeviceIndex++; int idev = 0; while(1) { SP_DEVICE_INTERFACE_DATA did = {0}; did.cbSize = sizeof(did); if(SetupDiEnumDeviceInterfaces(hdev, NULL, &DeviceInfoData.ClassGuid, idev, &did)) { idev++; DWORD cbRequired = 0; SetupDiGetDeviceInterfaceDetail(hdev, &did, 0, 0, &cbRequired, 0); if (ERROR_INSUFFICIENT_BUFFER == GetLastError()) { PSP_DEVICE_INTERFACE_DETAIL_DATA pdidd = (PSP_DEVICE_INTERFACE_DETAIL_DATA)LocalAlloc(LPTR, cbRequired); if (pdidd) { pdidd->cbSize = sizeof(*pdidd); if (SetupDiGetDeviceInterfaceDetail(hdev, &did, pdidd, cbRequired, &cbRequired, 0)) { OutputDebugString(pdidd->DevicePath); OutputDebugString(_T("\r\n")); if(uPID && uVID) { LPTSTR pszVid = _tcsstr(pdidd->DevicePath, _T("vid_")); LPTSTR pszPid = _tcsstr(pdidd->DevicePath, _T("pid_")); if(pszVid && pszPid) { TCHAR szVID[5]={0}, szPID[5]={0}; _tcsncpy_s(szVID, pszVid+4, 4); _tcsncpy_s(szPID, pszPid+4, 4); UINT pid = (UINT)_tcstol(szPID, NULL, 16); UINT vid = (UINT)_tcstol(szVID, NULL, 16); if(pid == uPID && vid == uVID) { if(iFoundCount == iIndex) { if(szDevPath) { _tcscpy_s(szDevPath, MAX_PATH, pdidd->DevicePath); } bRet = TRUE; } iFoundCount++; } } } } LocalFree(pdidd); } } } else { if (ERROR_NO_MORE_ITEMS == GetLastError()) { break; // Enumeration failed - perhaps there are no more items } } } } SetupDiDestroyDeviceInfoList(hdev); } return bRet;}int _tmain(int argc, _TCHAR* argv[]){ TCHAR szDevPath[MAX_PATH+1] = {0}; if(EnumUSBDevice(0x403, 0x6001, TRUE, szDevPath)) { MessageBox(NULL, szDevPath, _T("Usb Device"), MB_OK); }return 0;}
- 根据VID PID获取USB设备路径
- 根据VID/PID识别USB设备程序
- 获取usb设备的vid,pid
- 获取指定USB设备的VID PID和SerialNumber
- 获取指定USB设备的VID PID和SerialNumber
- 【VC】 获取电脑USB设备VID和PID等信息。
- 获取电脑USB设备VID和PID等信息。
- 浅谈USB设备的VID和PID
- 浅谈USB设备的VID和PID
- 浅谈USB设备的VID和PID
- USB设备的VID和PID
- USB设备的VID与PID
- USB设备的VID和PID
- USB设备的VID和PID
- USB设备的VID与PID
- USB设备的VID与PID
- USB设备的VID与PID
- USB设备的VID与PID
- js最佳实践2----松散耦合
- Android AlertDialg 对话框详细介绍
- 使用PyInstaller——Python程序转换为EXE
- 在公网上搭建的svn的经验
- 很牛逼的方法调用:
- 根据VID PID获取USB设备路径
- NYOJ 546 Divideing Jewels 多重背包
- 三大UML建模工具Visio、Rational Rose、PowerDesign的区别
- oracle,mysql,sql server,db2取表中随机几条数据
- QT的密码输入框以及国际化的一些问题
- Eclipse Java EE IDE for Web Developers 连接Sqlserver2008(采用jdbc4.0)
- bzip2
- strut2中使用ajax主题时出现 template/ajax/head.ftl. 错误的解决办法
- Android内存情况