stehen. Der folgende Code funktioniert bis dahin, nur es wird kein Pfadname zurückgegeben.
Der Code soll alle angeschlossenen HIDs scannen ( funktioniert z.B. mit einem USB Joystick und allen anderen HIDs ). Der MemberIndex steht momentan noch auf 0, da ich nur ein HID angeschlossen habe.
Was mache ich falsch ???
Der orginale und funktionierende VB Code:
http://www.lvr.com/files/usbhidio2.zip
Die MSDN: http://www.msdn.microsoft.com/library/
Code: Alles auswählen
OpenLibrary(0,"hid.dll")
OpenLibrary(1,"setupapi.dll")
Debug "HidD_GetHidGuid Zeiger: "+Str(IsFunction(0,"HidD_GetHidGuid"))
Debug "SetupDiGetClassDevsA Zeiger: "+Str(IsFunction(1,"SetupDiGetClassDevsA"))
Debug "SetupDiEnumDeviceInterfaces Zeiger: "+Str(IsFunction(1,"SetupDiEnumDeviceInterfaces"))
Debug "SetupDiGetDeviceInterfaceDetailA Zeiger: "+Str(IsFunction(1,"SetupDiGetDeviceInterfaceDetailA"))
*HidGuid=AllocateMemory(16) ;128bit HID Guid
CallFunction(0,"HidD_GetHidGuid",*HidGuid)
*DeviceInfoSet=CallFunction(1,"SetupDiGetClassDevsA",*HidGuid,0,0,$2|$10)
Debug "DeviceInfoSet Zeiger: "+Str(*DeviceInfoSet)
Structure SP_DEVICE_INTERFACE_DATA
cbSize.l
InterfaceClassGuid1.l[1]
InterfaceClassGuid2.w[2]
InterfaceClassGuid3.b[8]
Flags.l
Reserved.l
EndStructure
Structure SP_DEVICE_INTERFACE_DETAIL_DATA
cbSize.l
DevicePath.s
EndStructure
DeviceInterfaceData.SP_DEVICE_INTERFACE_DATA
DeviceInterfaceDetailData.SP_DEVICE_INTERFACE_DETAIL_DATA
DeviceInterfaceData\cbSize=SizeOf(SP_DEVICE_INTERFACE_DATA)
MemberIndex.l=0
Result.l=CallFunction(1,"SetupDiEnumDeviceInterfaces",*DeviceInfoSet,0,*HidGuid,MemberIndex,DeviceInterfaceData)
Debug "InterfaceClassGuid Data1= "+Hex(DeviceInterfaceData\InterfaceClassGuid1)
Debug "InterfaceClassGuid Data2= "+Hex(DeviceInterfaceData\InterfaceClassGuid2[0])
Debug "InterfaceClassGuid Data3= "+Hex(DeviceInterfaceData\InterfaceClassGuid2[1])
Debug "Flags= "+Str(DeviceInterfaceData\Flags)
RequiredSize.l
Result.l=CallFunction(1,"SetupDiGetDeviceInterfaceDetailA",*DeviceInfoSet,DeviceInterfaceData,0,0,@RequiredSize,0)
Debug "Erster SetupDiGetDeviceInterfaceDetailA() Aufruf: RequiredSize= "+Str(RequiredSize)
DetailData.l=RequiredSize
DeviceInterfaceDetailData\cbSize=SizeOf(SP_DEVICE_INTERFACE_DETAIL_DATA)
Dim DetailDataBuffer.b(RequiredSize)
RtlMoveMemory_(@DetailDataBuffer(0),@DeviceInterfaceDetailData\cbSize,4)
Debug DetailDataBuffer(0)
Debug DeviceInterfaceDetailData\cbsize
Debug Result.l=CallFunction(1,"SetupDiGetDeviceInterfaceDetailA",*DeviceInfoSet,DeviceInterfaceData,@DetailDataBuffer,DetailData,@RequiredSize,0)
Debug PeekS(@DetailDataBuffer+4)
End
Kann man in einer Struktur eine Variable deklarieren, die länger als Long ist ( eben die 16Byte der Guid), ohne auf Arrays zurückgreifen zu müssen ?
Vielen Dank für die Antwort(en)