USB-HID设备不能写入

三色 2013-06-03 05:17:53
最近开发了USB-HID设备通信程序,
发现能读取数据,但是不能写入数据,不知道什么原因。。。
打开设备如下:
HIDHandle = CreateFile _
(DevicePathName, _
GENERIC_READ Or GENERIC_WRITE, _
(FILE_SHARE_READ Or FILE_SHARE_WRITE), _
Security, _
OPEN_EXISTING, _
0&, _
0)

打开后设备的OutputReportByteLength=0,所以无法写数据,有懂的吗?
...全文
210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2013-06-05
  • 打赏
  • 举报
回复
对了,设备有哪些报表,是否允许主机写,是设备固件代码决定的。有些 HID 设备,作为纯粹的输入接口,是不需要主机写操作的。
of123 2013-06-05
  • 打赏
  • 举报
回复
看看有无 FeatureReportByteLength?用 SetFeature 方法写。
三色 2013-06-04
  • 打赏
  • 举报
回复
引用 2 楼 Veron_04 的回复:
DevicePathName必须是"\\.\"开头的,不知道你的是不是?
我的查了一下是"\\?\"开头,有什么讲究吗
贝隆 2013-06-04
  • 打赏
  • 举报
回复
Option Explicit '例子 'Example by Howard Henry Schlunder ' This example requires one command button (Command1) Private Declare Function GetVersion Lib "kernel32" () As Long Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Any) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Const INVALID_HANDLE_VALUE = -1 Private Const OPEN_EXISTING = 3 Private Const FILE_FLAG_Delete_ON_CLOSE = 67108864 Private Const GENERIC_READ = &H80000000 Private Const GENERIC_WRITE = &H40000000 Private Const IOCTL_STORAGE_EJECT_MEDIA = 2967560 Private Const VWIN32_DIOC_DOS_IOCTL = 1 Private Type DIOC_REGISTERS reg_EBX As Long reg_EDX As Long reg_ECX As Long reg_EAX As Long reg_EDI As Long reg_ESI As Long reg_Flags As Long End Type Private Sub Command1_Click() Dim bolP As Boolean bolP = funEjectUSBDevice("h") Debug.Print bolP End Sub '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '函数功能:弹出USB设备或光盘 '参数说明:strDeviceName:设备名称(盘符),例如:E '返回说明:成功 True 失败 False '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Private Function funEjectUSBDevice(ByVal strDeviceName As String) As Boolean Dim hDrive As Long Dim DummyReturnedBytes As Long Dim EjectDrive As String Dim DriveLetterAndColon As String Dim RawStuff As DIOC_REGISTERS On Error GoTo errFun funEjectUSBDevice = False If strDeviceName = "" Then Exit Function EjectDrive = strDeviceName If Len(EjectDrive) Then 'Confirm the user didn't cancel DriveLetterAndColon = UCase(Left$(EjectDrive & ":", 2)) 'Make it all caps for easy interpretation If GetVersion >= 0 Then 'We are running Windows NT/2000 hDrive = CreateFile("\\.\" & DriveLetterAndColon, GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0, OPEN_EXISTING, 0, 0) If hDrive <> INVALID_HANDLE_VALUE Then 'Eject media! Call DeviceIoControl(hDrive, IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, DummyReturnedBytes, ByVal 0) Call CloseHandle(hDrive) 'Clean up after ourselves End If Else 'We are running Win9x/Me hDrive = CreateFile("\\.\VWIN32", 0, 0, ByVal 0, 0, FILE_FLAG_Delete_ON_CLOSE, 0) If hDrive <> INVALID_HANDLE_VALUE Then 'Setup our raw registers to use Interrupt 21h Function 440Dh Minor Code 49h RawStuff.reg_EAX = &H440D 'The function to use RawStuff.reg_EBX = Asc(DriveLetterAndColon) - Asc("A") + 1 'The drive to do it on RawStuff.reg_ECX = &H49 Or &H800 'The minor code of the function in the low byte of the low word and the device category of 8 in the high byte of the low word 'Eject media! Call DeviceIoControl(hDrive, VWIN32_DIOC_DOS_IOCTL, RawStuff, LenB(RawStuff), RawStuff, LenB(RawStuff), DummyReturnedBytes, ByVal 0) Call CloseHandle(hDrive) 'Clean up after ourselves End If End If End If funEjectUSBDevice = True Exit Function errFun: funEjectUSBDevice = False End Function Private Sub Form_Load() End Sub
贝隆 2013-06-04
  • 打赏
  • 举报
回复
DevicePathName必须是"\\.\"开头的,不知道你的是不是?
贝隆 2013-06-04
  • 打赏
  • 举报
回复
不是:\\?\ 是:\\.\ 应该是驱动层的约定吧
三色 2013-06-03
  • 打赏
  • 举报
回复
是不是有的USB-HID设备不支持写入的?

7,763

社区成员

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

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