Private Sub cmdUSBTest_Click()
    Dim HidGuid As GUID
    Dim GUIDString As String
    Dim MemberIndex As Long
    Dim HidDevInfo As Long  'SetupDiGetClassDevs的返回值
    Dim Result As Long
    Dim MyDeviceInterfaceData As SP_DEVICE_INTERFACE_DATA
    
    Dim RequiredSize As Long  'SetupDiGetDeviceInterfaceDetail的参数
    Dim MyDeviceInterfaceDetailData As SP_DEVICE_INTERFACE_DETAIL_DATA
    Dim DetailData As Long
    Dim DetailDataBuffer() As Byte
    Dim DevicePathName As String
    
    HidD_GetHidGuid HidGuid
    HidDevInfo = SetupDiGetClassDevs(HidGuid, vbNullString, 0, (DIGCF_PRESENT Or DIGCF_DEVICEINTERFACE))
    
    For MemberIndex = 0 To 10
        MyDeviceInterfaceData.cbSize = LenB(MyDeviceInterfaceData)
        If SetupDiEnumDeviceInterfaces(HidDevInfo, 0, HidGuid, MemberIndex, MyDeviceInterfaceData) = 0 Then
            SetupDiDestroyDeviceInfoList HidDevInfo
        Else
            SetupDiGetDeviceInterfaceDetail HidDevInfo, MyDeviceInterfaceData, 0, 0, RequiredSize, 0
            DetailData = RequiredSize
            MyDeviceInterfaceDetailData.cbSize = Len(MyDeviceInterfaceDetailData)
            ReDim DetailDataBuffer(RequiredSize)
            
            RtlMoveMemory DetailDataBuffer(0), MyDeviceInterfaceDetailData, 4
            
            If SetupDiGetDeviceInterfaceDetail(HidDevInfo, MyDeviceInterfaceData, VarPtr(DetailDataBuffer(0)), DetailData, RequiredSize, 0) <> 0 Then
                DevicePathName = CStr(DetailDataBuffer())
                DevicePathName = StrConv(DevicePathName, vbUnicode)
                DevicePathName = Right(DevicePathName, Len(DevicePathName) - 4)
                MsgBox DevicePathName
            End If
        
        End If    Next MemberIndex
    
    SetupDiDestroyDeviceInfoList HidDevInfoEnd Sub
我的本意是与USB接口的打印机传输数据,写了一大段后始终出错,于是只写一小部分,逐行测试,发现SetupDiEnumDeviceInterfaces总是返回0,但我已经插了U盘了啊,怎么回事?
请各位高手分析指教!

解决方案 »

  1.   


    用 GetLastError 取一下错误代码,看看是什么问题。
      

  2.   

    if( !SetupDiEnumDeviceInterfaces( hDevInfo, NULL, &guidHID, i, &InterfaceData ) )
      

  3.   

    GetLastError的返回值是ERROR_NO_MORE_ITEMS,怎么回事呢?
    这段程序要怎么写?
      

  4.   

    ERROR_NO_MORE_ITEMS 表示没有找到这样的设备。
      

  5.   

    我也遇到此类问题,能检测到USB鼠标,但就是检测不到U盘。还在解决中