访问USB设备时出错,SetupDiEnumDeviceInterfaces总是返回0,请问是什么原因

baiyongming 2008-10-13 04:50:33

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 HidDevInfo

End Sub


我的本意是与USB接口的打印机传输数据,写了一大段后始终出错,于是只写一小部分,逐行测试,发现SetupDiEnumDeviceInterfaces总是返回0,但我已经插了U盘了啊,怎么回事?
请各位高手分析指教!
...全文
221 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcb111 2012-04-25
  • 打赏
  • 举报
回复
我也遇到此类问题,能检测到USB鼠标,但就是检测不到U盘。还在解决中
of123 2010-01-13
  • 打赏
  • 举报
回复
ERROR_NO_MORE_ITEMS 表示没有找到这样的设备。
swalp 2008-10-14
  • 打赏
  • 举报
回复
高深的东西,我是不懂啊。帮你顶起来吧
baiyongming 2008-10-14
  • 打赏
  • 举报
回复
GetLastError的返回值是ERROR_NO_MORE_ITEMS,怎么回事呢?
这段程序要怎么写?
用户 昵称 2008-10-13
  • 打赏
  • 举报
回复
if( !SetupDiEnumDeviceInterfaces( hDevInfo, NULL, &guidHID, i, &InterfaceData ) )
lanyork 2008-10-13
  • 打赏
  • 举报
回复
UP!!帮顶!!
of123 2008-10-13
  • 打赏
  • 举报
回复

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

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧