Code: Select all
#Include Once "windows.bi"
#Include Once "win\setupapi.bi"
#Include Once "win\ocidl.bi"
Type HIDD_ATTRIBUTES
size As Dword
VendorID As Word
ProductID As Word
VersionNumber As Word
End Type
Dim As HIDD_ATTRIBUTES HIDAttributes
Type my_DEVICE_INTERFACE_DETAIL_DATA
cbSize As Integer
txt As ZString*160
End Type
Dim As my_DEVICE_INTERFACE_DETAIL_DATA SPDEVICEINTERFACEDETAILDATA
Dim HDEVINFO As hDevInfo
Dim As SP_DEVINFO_DATA DeviceInfoData
Dim As SP_DEVICE_INTERFACE_DATA Spdeviceinterfacedata
Dim buffersize As Integer
Dim hPort As HANDLE
Dim As WString*128 WS
Screen 18
Color ,1:Cls:Color 14, 1
Dim guid As GUID
Dim guids As LPOLESTR
Dim As Any Ptr hLib = DylibLoad( "hid.dll" )
Dim HidD_GetHidGuid As Sub(ByVal guidv As guid Ptr) _
= DyLibSymbol(hlib, "HidD_GetHidGuid")
Dim HidD_GetAttributes As _
Function(ByVal As HANDLE, ByVal As Any Ptr)As Integer _
= DyLibSymbol(hlib, "HidD_GetAttributes")
Dim HidD_GetManufacturerString As _
Function(ByVal As HANDLE, ByVal As Any Ptr, ByVal As Integer)As Integer _
= DyLibSymbol(hlib, "HidD_GetManufacturerString")
Dim HidD_GetProductString As _
Function(ByVal As HANDLE, ByVal As Any Ptr, ByVal As Integer)As Integer _
= DyLibSymbol(hlib, "HidD_GetProductString")
Dim HidD_GetSerialNumberString As _
Function(ByVal As HANDLE, ByVal As Any Ptr, ByVal As Integer)As Integer _
= DyLibSymbol(hlib, "HidD_GetSerialNumberString")
If hLib = 0 Then
Print "Dylibload(hid.dll) failed"
Sleep : End
Else
HidD_GetHidGuid(@guid)
StringFromIID(@guid,@guids)
Print "USB_HID_GUID: ";*guids
End If
hDevInfo = SetupDiGetClassDevs(@guid,0,0,DIGCF_PRESENT Or DIGCF_DEVICEINTERFACE)
If hDevInfo = INVALID_HANDLE_VALUE Then
Print "SetupDiGetClassDevs failed"
Sleep : End
End If
DeviceInfoData.cbSize = SizeOf(SP_DEVINFO_DATA)
SetupDiEnumDeviceInfo(hDevInfo, 0, @DeviceInfoData)
StringFromIID(@DeviceInfoData. ClassGuid, @guids)
Print "ClassGuid: " ; *guids
Dim MemberIndex As Integer
Do
Spdeviceinterfacedata.cbSize = SizeOf(SP_DEVICE_INTERFACE_DATA)
If SetupDiEnumDeviceInterfaces(hDevInfo, 0, @guid, MemberIndex, _
@SpDeviceInterfaceData) = 0 Then
If GetLastError() = ERROR_NO_MORE_ITEMS Then Exit Do
EndIf
StringFromIID(@Spdeviceinterfacedata.InterfaceClassGuid, @guids)
Print :Print "InterfaceClassGuid: " ; *guids
buffersize=SizeOf(my_DEVICE_INTERFACE_DETAIL_DATA)
SPDEVICEINTERFACEDETAILDATA.cbSize = 5 '$%#@ :(
If SetupDiGetDeviceInterfaceDetail(hDevInfo, @Spdeviceinterfacedata, _
Cast(Any Ptr, @SPDEVICEINTERFACEDETAILDATA), buffersize, 0, 0) = 0 Then
If GetLastError() = ERROR_INSUFFICIENT_BUFFER Then Exit Do
End If
Print "DevicePathName: " ; SPDEVICEINTERFACEDETAILDATA.txt
SetLastError(0)
hPort = CreateFile(StrPtr(SPDEVICEINTERFACEDETAILDATA.txt), _
GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)
If hPort = 0 Then Exit Do
If GetLastError() Then Exit Do
HIDAttributes.size = SizeOf(HIDD_ATTRIBUTES)
HidD_GetAttributes(hPort, @HIDAttributes)
If GetLastError() Then Exit Do
Print "VendorID: " ; Hex(HIDAttributes.VendorID, 4)
Print "ProductID: " ; Hex(HIDAttributes.ProductID, 4)
Print "VersionNumber: " ; Hex(HIDAttributes.VersionNumber, 4)
If HidD_GetManufacturerString(hPort,StrPtr(WS), 128) Then _
Print "Manufacturer: " ; WS
If HidD_GetProductString(hPort,StrPtr(WS), 128) Then _
Print "Product: " ; WS
If HidD_GetSerialNumberString(hPort,StrPtr(WS), 128) Then _
Print "SerialNumber: " ; WS
MemberIndex = MemberIndex + 1
Loop
SetupDiDestroyDeviceInfoList @hDevInfo
If hPort Then CloseHandle(hPort)
If hLib Then DylibFree hLib
Sleep