获取电脑USB设备VID和PID等信息。

转自:【VC】 获取电脑USB设备VID和PID等信息。

1,添加头文件和宏定义


  1. #include <setupapi.h>   
  2. #include <initguid.h>   
  3. #pragma comment(lib,"setupapi.lib")  
  4.   
  5. DEFINE_GUID (UsbClassGuid, 0xa5dcbf10L, 0x6530, 0x11d2, 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed);  
#include <setupapi.h>
#include <initguid.h>
#pragma comment(lib,"setupapi.lib")

DEFINE_GUID (UsbClassGuid, 0xa5dcbf10L, 0x6530, 0x11d2, 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed);



  1. HDEVINFO hDevInfo;  
  2. SP_DEVICE_INTERFACE_DATA spDevData;  
  3. PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail;  
  4. BOOL bRes = TRUE;  
  5. int nCount = 0;  
  6. hDevInfo = ::SetupDiGetClassDevs((LPGUID)&UsbClassGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);  
  7. if (hDevInfo != INVALID_HANDLE_VALUE)  
  8. {  
  9.     pDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT,1024);  
  10.     pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);  
  11.     while (bRes)  
  12.     {             
  13.         spDevData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);  
  14.         bRes = ::SetupDiEnumDeviceInterfaces(hDevInfo,NULL,(LPGUID)&UsbClassGuid,nCount,&spDevData);  
  15.         if (bRes)  
  16.         {  
  17.             bRes = ::SetupDiGetInterfaceDeviceDetail(hDevInfo,&spDevData,pDetail,1024,NULL,NULL);  
  18.             if (bRes)  
  19.             {  
  20.                 CString szStr = pDetail->DevicePath;  
  21.                                                   
  22.                 nCount ++;  
  23.             }  
  24.         }  
  25.     }  
  26.     ::GlobalFree(pDetail);  
  27.     ::SetupDiDestroyDeviceInfoList(hDevInfo);  
  28. }  
HDEVINFO hDevInfo;
SP_DEVICE_INTERFACE_DATA spDevData;
PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail;
BOOL bRes = TRUE;
int nCount = 0;
hDevInfo = ::SetupDiGetClassDevs((LPGUID)&UsbClassGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
if (hDevInfo != INVALID_HANDLE_VALUE)
{
	pDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT,1024);
	pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
	while (bRes)
	{			
		spDevData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
		bRes = ::SetupDiEnumDeviceInterfaces(hDevInfo,NULL,(LPGUID)&UsbClassGuid,nCount,&spDevData);
		if (bRes)
		{
			bRes = ::SetupDiGetInterfaceDeviceDetail(hDevInfo,&spDevData,pDetail,1024,NULL,NULL);
			if (bRes)
			{
				CString szStr = pDetail->DevicePath;
												
				nCount ++;
			}
		}
	}
	::GlobalFree(pDetail);
	::SetupDiDestroyDeviceInfoList(hDevInfo);
}

pDetail->DevicePath = 0x00224f04 " \\?\usb#vid_0451&pid_f432#3aff466e374b2516#{a5dcbf10-6530-11d2-901f-00c04fb951ed }"
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值