GetRawInputDeviceList (user32)
Last changed: gmartinnc-38.104.62.78

.
Summary
The GetRawInputDeviceList function enumerates the raw input devices attached to the system.

C# Signature:

    [StructLayout( LayoutKind.Sequential )]
    public struct RAWINPUTDEVICELIST
    {
        public int hDevice;
        public int dwType;
    }

    [DllImport("user32.dll")]
    public static extern int GetRawInputDeviceList
    (
        IntPtr pRawInputDeviceList,
        ref int puiNumDevices,
        int cbSize
    );

VB.Net Signature:

   < StructLayout( LayoutKind.Sequential )> _
    Public Structure RAWINPUTDEVICELIST
       Public hDevice as Int32
       Public dwType as UInt32
    End Structure

   <DllImport("user32.dll", CharSet:=CharSet.Auto,
    EntryPOint:="GetRawInputDeviceList", SetLastError:=True)> _
    Public Function GetRawInputDeviceList(ByVal pRawInputDeviceList As
    IntPtr, ByRef puiNumDevices As Int32, ByVal cbSize As Int32) As Int32
    End Function

VB Signature:

Declare Function GetRawInputDeviceList Lib "user32.dll" (ByVal pRawInputDeviceList As
    IntPtr, ByRef puiNumDevices As Long, ByVal cbSize As Long) As Long

User-Defined Types:

None.

Alternative Managed API:

Notes:

None.

Tips & Tricks:

Sample Code:

//create a buffer on the unmanaged heap

int structSize = Marshal.SizeOf(typeof(RAWINPUTDEVICELIST));

int bufferCount = 10;

IntPtr buffer = Marshal.AllocHGlobal(bufferCount * structSize);

//get the list of HID devices

int deviceCount = GetRawInputDeviceList(buffer, ref bufferCount, structSize);

//iterate through each structure in the buffer

for (int i = 0; i < deviceCount; i)

{

    RAWINPUTDEVICELIST device = (RAWINPUTDEVICELIST)Marshal.PtrToStructure(

new IntPtr((buffer.ToInt32() + (structSize * i))),typeof(RAWINPUTDEVICELIST));

...

}

Documentation