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

 

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


 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值