1,486
社区成员
发帖
与我相关
我的任务
分享
Public Sub WriteReport()
result = WriteFile(HidDevice, SendBuffer(0), 65, 0, 0)
End Sub
Public Sub tmrDelay_Timer()
Timeout = True
SetHosMsg.tmrDelay = False
End Sub
Public Sub ReadReport()
result = ReadFile(HidDevice, ReadBuffer(0), 65, 0, 0)
End Sub
Public Sub VBtoUSB()
Call WriteReport '发送
Timeout = False
SetHosMsg.tmrDelay.Interval = 5
SetHosMsg.tmrDelay.Enabled = True
Do
DoEvents
Loop While Timeout = True
Call ReadReport '接收
End Sub
Public Sub ConnectRMC() '查找及打开设备
Dim HidGuid As GUID
Dim DeviceInfoSet As Long
Dim MemberIndex As Long
Dim result As Long
Dim Needed As Long
Dim DetailData As Long
Dim PreparsedData As Long
Dim DetailDataBuffer() As Byte
Dim DevicePathName As String
Dim LastDevice As Boolean
Dim MyDeviceDetected As Boolean
LastDevice = False
MyDeviceDetected = False
result = HidD_GetHidGuid(HidGuid)
DeviceInfoSet = SetupDiGetClassDevs(HidGuid, 0, 0, (DIGCF_PRESENT Or DIGCF_DEVICEINTERFACE))
'DataString = GetDataString(DeviceInfoSet, 32)
MemberIndex = 0
For MemberIndex = 0 To 10
MyDeviceInterfaceData.cbSize = LenB(MyDeviceInterfaceData)
result = SetupDiEnumDeviceInterfaces(DeviceInfoSet, 0, HidGuid, MemberIndex, MyDeviceInterfaceData)
If result = 0 Then LastDevice = True
If result <> 0 Then
MyDeviceInfoData.cbSize = Len(MyDeviceInfoData)
result = SetupDiGetDeviceInterfaceDetail(DeviceInfoSet, MyDeviceInterfaceData, 0, 0, Needed, 0)
DetailData = Needed
MyDeviceInterfaceDetailData.cbSize = Len(MyDeviceInterfaceDetailData)
ReDim DetailDataBuffer(Needed)
Call RtlMoveMemory(DetailDataBuffer(0), MyDeviceInterfaceDetailData, 4)
result = SetupDiGetDeviceInterfaceDetail(DeviceInfoSet, MyDeviceInterfaceData, VarPtr(DetailDataBuffer(0)), DetailData, Needed, 0)
DevicePathName = CStr(DetailDataBuffer())
DevicePathName = StrConv(DevicePathName, vbUnicode)
DevicePathName = Right$(DevicePathName, Len(DevicePathName) - 4)
HidDevice = CreateFile(DevicePathName, GENERIC_READ Or GENERIC_WRITE, (FILE_SHARE_READ Or FILE_SHARE_WRITE), 0, OPEN_EXISTING, 0, 0) '打开设备DevicePathName 是由 SetupDiGetDeviceInterfaceDetail返回的
If HidDevice <> INVALID_HANDLE_VALUE Then
DeviceAttributes.Size = LenB(DeviceAttributes)
result = HidD_GetAttributes(HidDevice, DeviceAttributes) '获取设备VendorID和ProductID
result = CloseHandle(HidDevice)
If result <> 0 And DeviceAttributes.VendorID = MyVendorID And DeviceAttributes.ProductID = MyProductID And DeviceAttributes.VersionNumber = MyVersionNumber Then
HidDevice = CreateFile(DevicePathName, GENERIC_READ Or GENERIC_WRITE, (FILE_SHARE_READ Or FILE_SHARE_WRITE), 0, OPEN_EXISTING, 0, 0)
If HidDevice <> INVALID_HANDLE_VALUE Then
MyDeviceDetected = True
Exit For
'Else
'MsgBox ("再次打开失败")
End If
Else
'MsgBox ("管理平台与设备无法匹配")
End If
Else
'MsgBox ("打开设备失败")
End If
End If
Next MemberIndex
If MyDeviceDetected = True Then
FindTheHid = True
'MsgBox ("设备连接正常")
Exit Sub
Else
FindTheHid = False
'MsgBox ("无法找到设备")
End If
End Sub