2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 获取指定USB设备的VID PID和SerialNumber

获取指定USB设备的VID PID和SerialNumber

时间:2022-05-28 05:22:26

相关推荐

获取指定USB设备的VID PID和SerialNumber

设备厂商ID 查询, + vendor idlist

所需头文件库文件: #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);

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。