RAWINPUT (Structures)
Last changed: -198.53.11.111

.
Summary

C# Definition:

    /// <summary>
    /// Value type for raw input.
    /// </summary>
    [StructLayout(LayoutKind.Explicit)]
    public struct RawInput
    {
        /// <summary>Header for the data.</summary>
        [FieldOffset(0)]
        public RawInputHeader Header;
        /// <summary>Mouse raw input data.</summary>
        [FieldOffset(16)]        
        public RawInputMouse Mouse;
        /// <summary>Keyboard raw input data.</summary>
        [FieldOffset(16)]
        public RawKeyboard Keyboard;
        /// <summary>HID raw input data.</summary>
        [FieldOffset(16)]
        public RawInputHid Hid;
    }

x86/x64 safe version:

    /// <summary>
    /// Contains the raw input from a device.
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct RawInput
    {
        /// <summary>
        /// Header for the data.
        /// </summary>
        public RawInputHeader Header;
        public Union Data;
        [StructLayout(LayoutKind.Explicit)]
        public struct Union
        {
            /// <summary>
            /// Mouse raw input data.
            /// </summary>
            [FieldOffset(0)]
            public RawMouse Mouse;
            /// <summary>
            /// Keyboard raw input data.
            /// </summary>
            [FieldOffset(0)]
            public RawKeyboard Keyboard;
            /// <summary>
            /// HID raw input data.
            /// </summary>
            [FieldOffset(0)]
            public RawHID HID;
        }
    }

VB Definition:

    ''' <summary>Contains the raw input from a device.</summary>
    <StructLayout(LayoutKind.Sequential)>
    Public Structure RawInput
    ''' <summary>Header for the data.</summary>
    Public Header As RAWINPUTHEADER
    Public Data As Union
    <StructLayout(LayoutKind.Explicit)>
    Public Structure Union
        ''' <summary>Mouse raw input data.</summary>
        <FieldOffset(0)>
        Public Mouse As RAWMOUSE
        ''' <summary>Keyboard raw input data.</summary>
        <FieldOffset(0)>
        Public Keyboard As RAWKEYBOARD
        ''' <summary>HID raw input data.</summary>
        <FieldOffset(0)>
        Public HID As RAWHID
    End Structure
    End Structure

User-Defined Field Types:

None.

Notes:

On 64bit platform use offset size 24.

Documentation
RAWINPUT on MSDN