天天看點

擷取電腦USB裝置VID和PID等資訊。

轉自:【VC】 擷取電腦USB裝置VID和PID等資訊。

1,添加頭檔案和宏定義

[cpp] view plain copy print ?

  1. #include <setupapi.h>   
  2. #include <initguid.h>   
  3. #pragma comment(lib,"setupapi.lib")  
  4. 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);
           

[cpp] view plain copy print ?

  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.                 nCount ++;  
  22.             }  
  23.         }  
  24.     }  
  25.     ::GlobalFree(pDetail);  
  26.     ::SetupDiDestroyDeviceInfoList(hDevInfo);  
  27. }  
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 }"

繼續閱讀