您的位置:首页 > 其它

获取指定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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: