关于枚举USB的问题
再调用SetupDiEnumDeviceInterfaces函数的时候,只返回1次,这1次返回的是我的USB鼠标,我插上去的U盘认不到。
代码如下:(Win32Usb是封装好的访问API类)
string strPath = string.Empty;
string strSearch = string.Format("vid_{0:x4}&pid_{1:x4}", nVid, nPid); // first, build the path search string
Guid gHid = Win32Usb.HIDGuid;//(返回HidD_GetHidGuid的GUID)
IntPtr hInfoSet = Win32Usb.SetupDiGetClassDevs(ref gHid, null, IntPtr.Zero, Win32Usb.DIGCF_DEVICEINTERFACE | Win32Usb.DIGCF_PRESENT);
try
{
while (true)
{
Boolean result = Win32Usb.SetupDiEnumDeviceInterfaces(hInfoSet, 0, ref gHid, (uint)nIndex, ref oInterface);
if (!result)
{
Console.WriteLine("枚举失败! : " + Marshal.GetLastWin32Error());
}
else
{
Console.WriteLine("枚举成功!");
}
nIndex++;
}
}
catch (Exception ex)
{
throw HIDDeviceException.GenerateError(ex.ToString());
//Console.WriteLine(ex.ToString());
}
finally
{
// Before we go, we have to free up the InfoSet memory reserved by SetupDiGetClassDevs
Win32Usb.SetupDiDestroyDeviceInfoList(hInfoSet);
}
------解决方案--------------------
注意U盘不是HID设备,使用HidD_GetHidGuid得到的GUID不能用于枚举U盘,你试一下DiskClassGuid或UsbClassGuid
另外,枚举U盘的话,其实不一定要用DDK,可以用WM_DEVICECHANGE获得U盘插入通知,用WMI也可以取得相关的设备信息