MFC如何获取USB的VID、PID和协议版本呢?
lwei2 2020-08-11 02:26:06 各位大佬,请问Win API有哪个接口可以获取指定的USB协议版本和VID、PID,在网上查看,很多都是把所有的USB的VID和PID找出来,这样不是会把键盘和鼠标的也找出来吗?我自己试过,它就连鼠标和键盘的都找出来了,要怎么做,才能找出只有自己插入的USB的VID和PID呢?代码如下:
//#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <string>
#include <setupapi.h>
#include <initguid.h>
using namespace std;
#pragma comment(lib,"setupapi.lib")
DEFINE_GUID(UsbClassGuid, 0xa5dcbf10L, 0x6530, 0x11d2, 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed);
//获取USB设备VID和PID
string GetUsbInfo()
{
HDEVINFO hDevInfo;
SP_DEVICE_INTERFACE_DATA spDevData;
PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail;
BOOL bRes = TRUE;
int nCount = 0;
string csResult;
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)
{
string szStr = pDetail->DevicePath;
csResult += szStr + "\n";
//break;
nCount++;
}
}
}
::GlobalFree(pDetail);
::SetupDiDestroyDeviceInfoList(hDevInfo);
}
return csResult;
}
int main(void)
{
string csStr = GetUsbInfo();
cout << csStr << endl;
cout << "End...";
return 0;
}
恳请懂的大佬指点一下,不胜感激!!