Private Sub Form_Load()
' Look for HID Devices.
'
' Declare the data structures used
Dim HidGuid As Guid
Dim DeviceInterfaceData As Device_Interface_Data
Dim FunctionClassDeviceData As Device_Interface_Detail
Dim ThisHIDdevice As HidD_Attributes
Dim Buffer(100) As Byte
Dim Success As Boolean
' First, get my class identifier
Call HidD_GetHidGuid(HidGuid.Data(0))
'
' Get a handle for the Plug and Play node and request currently active HID devices
PnPHandle& = SetupDiGetClassDevs(HidGuid.Data(0), 0, 0, &H12)
If (PnPHandle& = -1) Then ErrorExit ("Could not attach to PnP node")
'
' Lets look for a maximum of 20 HID devices
For HIDdevice& = 0 To 19
DeviceInterfaceData.cbsize = 28 'Length of data structure in bytes
' Is there a HID device at this table entry
If SetupDiEnumDeviceInterfaces(PnPHandle&, 0, HidGuid.Data(0), HIDdevice&, DeviceInterfaceData.cbsize) Then
' There is a device here, get it's name
FunctionClassDeviceData.cbsize = 5
Success = SetupDiGetDeviceInterfaceDetail(PnPHandle&, DeviceInterfaceData.cbsize, _
FunctionClassDeviceData.cbsize, UBound(FunctionClassDeviceData.DataPath), BytesReturned&, 0)
If (Success = 0) Then ErrorExit ("Could not find the system name for this HID device")
' Convert C string to Visual Basic String
HidName$ = "": i& = 0:
Do While FunctionClassDeviceData.DataPath(i&) <> 0
HidName$ = HidName$ & Chr(FunctionClassDeviceData.DataPath(i&)): i& = i& + 1: Loop
' Can now open this HID device
HidHandle& = CreateFile(HidName$, &HC0000000, 3, 0, 3, 0, 0)
If (HidHandle& = -1) Then ErrorExit ("Could not open HID device")
' Get VID and PID for display
Success = HidD_GetAttributes(HidHandle&, ThisHIDdevice.cbsize)
temp$ = " VID = " & TwoHexCharacters$(ThisHIDdevice.VendorID(1)) & TwoHexCharacters$(ThisHIDdevice.VendorID(0))
' Get Manufacturers name if present
If HidD_GetManufacturerString(HidHandle&, AddressFor(Buffer(0)), UBound(Buffer)) Then
temp$ = temp$ & " '": i& = 0
Do While Buffer(i&) <> 0: temp$ = temp$ & Chr(Buffer(i&)): i& = i& + 2: Loop
temp$ = temp$ & "'"
End If
temp$ = temp$ & ", PID = " & TwoHexCharacters$(ThisHIDdevice.ProductID(1)) & TwoHexCharacters$(ThisHIDdevice.ProductID(0))
' Get Product name if present
If HidD_GetProductString(HidHandle&, AddressFor(Buffer(0)), UBound(Buffer)) Then
temp$ = temp$ & " '": i& = 0
Do While Buffer(i&) <> 0: temp$ = temp$ & Chr(Buffer(i&)): i& = i& + 2: Loop
temp$ = temp$ & "'"
End If
' Add entry to Listbox
Display.AddItem temp$
Call CloseHandle(HidHandle&)
End If 'SetupDiEnumDeviceInterfaces
Next HIDdevice&
Call CloseHandle(PnPHandle&)
End Sub