Как я могу получить номер порта USB-устройства, подключенного к USB-порту? - PullRequest
1 голос
/ 12 марта 2012

Как я могу получить номер порта устройства USB, подключенного к порту USB, с помощью VB6?Я уже могу получить имя устройства USB, скажем: \\?\USB#Vid_0801&Pid_2250#7&91e2848&0&1#{4d36e978-e325-11ce-bfc1-08002be10318}

Как автоматически определить, какой номер порта ему назначен?Я делаю программу, которая автоматически определит номер порта определенного устройства, подключенного к любому из USB-портов, и начнет автоматически обмениваться данными с ним.

Ответы [ 2 ]

2 голосов
/ 20 декабря 2012

для просмотра доступных портов вы можете использовать:

'1 form with :
'    1 combobox : name=Combo1
'    1 mscomm control : name=MSComm1

Option Explicit

Public Enum PortAttr
  PortFree = 0
  PortInUse = 1
  PortUnknown = 2
End Enum

Private Sub Form_Load()
  'show available ports
  ShowPorts
End Sub

Private Sub ShowPorts()
  Dim intIndex As Integer
  Dim intPort As Integer
  Dim intFree As Integer
  On Error GoTo ErrorFound
  With MSComm1
    If .PortOpen Then .PortOpen = False
    intPort = .CommPort
    Combo1.Clear
    Combo1.AddItem "--- Not Used ---"
    Combo1.ItemData(0) = -2 'not possible
    Combo1.AddItem "---- In Use ----"
    Combo1.ItemData(1) = -2 'not possible
    intFree = 0
    For intIndex = 1 To 10
      Select Case CheckPort(intIndex)
        Case PortFree
          intFree = intFree + 1
          Combo1.AddItem "Com" & CStr(intIndex), intFree
          Combo1.ItemData(intFree) = intIndex
        Case PortInUse
          Combo1.AddItem "Com" & CStr(intIndex)
      End Select
    Next intIndex
    If .PortOpen Then .PortOpen = False
    .CommPort = intPort
    If CheckPort(intPort) = PortFree Then
      If .PortOpen = False Then .PortOpen = True
    End If
  End With 'MSComm1
Exit Sub
ErrorFound:
  MsgBox Err.Description, vbCritical, "Error " & CStr(Err.Number)
  On Error GoTo 0
End Sub

Private Function CheckPort(intPort As Integer) As PortAttr
  On Error GoTo ErrorFound
  With MSComm1
    If .PortOpen Then .PortOpen = False
    .CommPort = intPort
    .PortOpen = True
    CheckPort = PortFree
    If .PortOpen = False Then .PortOpen = True
  End With 'MSComm1
Exit Function
ErrorFound:
  Select Case Err.Number
    Case 8002 'port doesnt exist
      CheckPort = PortUnknown
    Case 8005 'port already in use
      CheckPort = PortInUse
  End Select
  On Error GoTo 0
End Function

в этом списке вы можете пометить порты, которые вы уже знаете, поэтому остальные должны быть портом с USB-устройства

обратите внимание: когда USB-устройство подключено через другой USB-порт, преобразованный порт RS232 также может быть другим

0 голосов
/ 12 марта 2012

У этого парня есть несколько полезных скриптов: http://todbot.com/blog/2012/03/02/listcomports-windows-command-line-tool-for-usb-to-serial/

...