kind of works? reading multiple mice: any c programmers want to look at this?
#8
Adding this reply as a way to keep track of this source as I work on converting what you've done so far. I'll have to pull up my Win32 Video Player code to bring in all my junk for the callbacks and window functions but the InitRawInput function works as expected  Smile

Code: (Select All)
Option Explicit
$NoPrefix
$Console:Only

Type RAWINPUTDEVICE
    As Unsigned Integer usUsagePage, usUsage
    As Unsigned Long dwFlags
    As Offset hwndTarget
End Type

Type RAWINPUTDEVICELIST
    As Offset hDevice
    As Unsigned Long dwType
    $If 64BIT Then
        As String * 4 alignment
    $End If
End Type

Declare CustomType Library
    Function GetRawInputDeviceList~& (ByVal pRawInputDeviceList As Offset, Byval puiNumDevices As Offset, Byval cbSize As Unsigned Long)
    Sub GetRawInputDeviceList (ByVal pRawInputDeviceList As Offset, Byval puiNumDevices As Offset, Byval cbSize As Unsigned Long)
    Function RegisterRawInputDevices& (ByVal pRawInputDevices As Offset, Byval uiNumDevices As Unsigned Long, Byval cbSize As Unsigned Long)
    Function GetLastError~& ()
End Declare

InitRawInput

Sub InitRawInput ()
    Dim As RAWINPUTDEVICE Rid(0 To 49)
    Dim As Unsigned Long nDevices
    Dim As RAWINPUTDEVICELIST RawInputDeviceList

    If GetRawInputDeviceList(0, Offset(nDevices), Len(RawInputDeviceList)) <> 0 Then
        Exit Sub
    End If

    Dim As MEM pRawInputDeviceList: pRawInputDeviceList = MemNew(Len(RawInputDeviceList) * nDevices)
    GetRawInputDeviceList pRawInputDeviceList.OFFSET, Offset(nDevices), Len(RawInputDeviceList)

    'This small block of commented code proves that we've got the device list
    'Dim As RAWINPUTDEVICELIST rawdevs(0 To nDevices - 1)
    'MemGet pRawInputDeviceList, pRawInputDeviceList.OFFSET, rawdevs()
    'Dim As Unsigned Long x
    'For x = 0 To UBound(rawdevs)
    '    Print rawdevs(x).hDevice, rawdevs(x).dwType
    'Next

    Print "Number of raw input devices:"; nDevices

    MemFree pRawInputDeviceList

    Rid(0).usUsagePage = &H01
    Rid(0).usUsage = &H02
    Rid(0).dwFlags = 0
    Rid(0).hwndTarget = 0

    If RegisterRawInputDevices(Offset(Rid()), 1, Len(Rid(0))) = 0 Then
        Print "RawInput init failed"
    End If
End Sub
Ask me about Windows API and maybe some Linux stuff
Reply


Messages In This Thread
RE: kind of works? reading multiple mice: any c programmers want to look at this? - by SpriggsySpriggs - 09-07-2022, 03:18 PM



Users browsing this thread: 40 Guest(s)