[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
);
< 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
Declare Function GetRawInputDeviceList Lib "user32.dll" (ByVal pRawInputDeviceList As
IntPtr, ByRef puiNumDevices As Long, ByVal cbSize As Long) As Long
None.
None.
//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));
...
}