获取指定USB设备的VID PID和SerialNumber
2012-12-20 17:31
1566 查看
设备厂商ID 查询, google www.usb.org + vendor id list
所需头文件库文件: #include <Setupapi.h> , Setupapi.lib
void CCameraInfoViewerDlg::CollectUSBInfo()
{
// 获取当前系统所有使用的设备
DWORD dwFlag = (DIGCF_ALLCLASSES | DIGCF_PRESENT);
HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, dwFlag);
if( INVALID_HANDLE_VALUE == hDevInfo )
{
AfxMessageBox( _T("获取系统设备列表失败") );
return;
}
// 准备遍历所有设备查找USB
SP_DEVINFO_DATA sDevInfoData;
sDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
//VID: ZYZW 公司的生产商号
const TCHAR NIKON_ID[] = _T("XYZW");
CString strText;
TCHAR szDIS[MAX_PATH]; // Device Identification Strings,
DWORD nSize = 0 ;
for(int i = 0; SetupDiEnumDeviceInfo(hDevInfo,i,&sDevInfoData); i++ )
{
nSize = 0;
if ( !SetupDiGetDeviceInstanceId(hDevInfo, &sDevInfoData, szDIS, sizeof(szDIS), &nSize) )
{
AfxMessageBox( _T("获取设备识别字符串失败") );
break;
}
// 设备识别串的前三个字符是否是"USB", 模板: USB\VID_XXXX&PID_XXXX\00000xxxxxxx
CString strDIS( szDIS );
strDIS.MakeUpper();
if( strDIS.Left( 3 ) == _T("USB") )
{
strText += strDIS;
strText += _T("\r\n");
int iVID_Pos = strDIS.Find( NIKON_ID );
if( iVID_Pos == 8 )
{
// VID: 厂商号
m_wndEditVID.SetWindowText( NIKON_ID );
// PID :产品号
int iSlashPos = strDIS.ReverseFind(_T('\\'));
int iPID_Pos = strDIS.Find( _T("PID_") );
CString strProductID = strDIS.Mid( iPID_Pos+4, iSlashPos - iPID_Pos - 4 );
m_wndEditPID.SetWindowText( strProductID );
// 序列号
int iRight = strDIS.GetLength() - iSlashPos -1;
CString strSerialNumber = strDIS.Right( iRight );
m_wndEditNUM.SetWindowText( strSerialNumber );
}
}
}
m_wndEditENUM.SetWindowText( strText );
// 释放设备
SetupDiDestroyDeviceInfoList(hDevInfo);
}
所需头文件库文件: #include <Setupapi.h> , Setupapi.lib
void CCameraInfoViewerDlg::CollectUSBInfo()
{
// 获取当前系统所有使用的设备
DWORD dwFlag = (DIGCF_ALLCLASSES | DIGCF_PRESENT);
HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, dwFlag);
if( INVALID_HANDLE_VALUE == hDevInfo )
{
AfxMessageBox( _T("获取系统设备列表失败") );
return;
}
// 准备遍历所有设备查找USB
SP_DEVINFO_DATA sDevInfoData;
sDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
//VID: ZYZW 公司的生产商号
const TCHAR NIKON_ID[] = _T("XYZW");
CString strText;
TCHAR szDIS[MAX_PATH]; // Device Identification Strings,
DWORD nSize = 0 ;
for(int i = 0; SetupDiEnumDeviceInfo(hDevInfo,i,&sDevInfoData); i++ )
{
nSize = 0;
if ( !SetupDiGetDeviceInstanceId(hDevInfo, &sDevInfoData, szDIS, sizeof(szDIS), &nSize) )
{
AfxMessageBox( _T("获取设备识别字符串失败") );
break;
}
// 设备识别串的前三个字符是否是"USB", 模板: USB\VID_XXXX&PID_XXXX\00000xxxxxxx
CString strDIS( szDIS );
strDIS.MakeUpper();
if( strDIS.Left( 3 ) == _T("USB") )
{
strText += strDIS;
strText += _T("\r\n");
int iVID_Pos = strDIS.Find( NIKON_ID );
if( iVID_Pos == 8 )
{
// VID: 厂商号
m_wndEditVID.SetWindowText( NIKON_ID );
// PID :产品号
int iSlashPos = strDIS.ReverseFind(_T('\\'));
int iPID_Pos = strDIS.Find( _T("PID_") );
CString strProductID = strDIS.Mid( iPID_Pos+4, iSlashPos - iPID_Pos - 4 );
m_wndEditPID.SetWindowText( strProductID );
// 序列号
int iRight = strDIS.GetLength() - iSlashPos -1;
CString strSerialNumber = strDIS.Right( iRight );
m_wndEditNUM.SetWindowText( strSerialNumber );
}
}
}
m_wndEditENUM.SetWindowText( strText );
// 释放设备
SetupDiDestroyDeviceInfoList(hDevInfo);
}
相关文章推荐
- 获取指定USB设备的VID PID和SerialNumber
- vc通过usb获取手机设备vidpid
- 获取电脑USB设备VID和PID等信息。
- 获取usb设备的vid,pid
- 【VC】 获取电脑USB设备VID和PID等信息。
- Android下USB设备VID与PID获取及ADB设置
- 根据VID PID获取USB设备路径
- libusb获取usb设备的idVendor(vid),idProduct(pid),以及Serial Number
- 关于Mac获取usb设备pid,vid,locationID的使用
- USB 设备的PID-Product ID,VID-Vendor ID
- Linux下查看USB设备的VID、PID命令
- VC++:结合设备安装类GUID和设备接口类GUID获取设备VIDPID
- 通过Windows注册表获取U盘、移动硬盘和USB读卡器等设备的PID、VID和序列号
- 视频倒立解决方法/USB 视频设备ID:USB\VID_13D3&PID_5130&MI_00\6&21DA5E09&0&0000
- 浅谈USB设备的VID和PID
- USB 设备的PID-Product ID,VID-Vendor ID
- VC++:结合设备安装类GUID和设备接口类GUID获取设备VIDPID
- USB设备的VID和PID
- USB 设备的PID-Product ID, VID-Vendor ID
- USB设备的VID和PID