Beispiel #1
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="device">The device that sent the event.</param>
 /// <param name="data">Raw input data to pass.</param>
 public RawInputKeyboardEventArgs(IntPtr device, ref RAWINPUTKEYBOARD data)
 {
     Handle       = device;
     KeyboardData = data;
 }
Beispiel #2
0
        /// <summary>
        /// Function to dispatch the raw input to a keyboard device.
        /// </summary>
        /// <param name="device">The device that will receive the data.</param>
        /// <param name="rawData">Raw input data to translate.</param>
        public static void Dispatch(IRawInputDeviceData <GorgonRawKeyboardData> device, ref RAWINPUTKEYBOARD rawData)
        {
            KeyboardDataFlags flags = KeyboardDataFlags.KeyDown;

            if ((rawData.Flags & RawKeyboardFlags.KeyBreak) == RawKeyboardFlags.KeyBreak)
            {
                flags = KeyboardDataFlags.KeyUp;
            }

            if ((rawData.Flags & RawKeyboardFlags.KeyE0) == RawKeyboardFlags.KeyE0)
            {
                flags |= KeyboardDataFlags.LeftKey;
            }

            if ((rawData.Flags & RawKeyboardFlags.KeyE1) == RawKeyboardFlags.KeyE1)
            {
                flags |= KeyboardDataFlags.RightKey;
            }

            // Shift has to be handled in a special case since it doesn't actually detect left/right from raw input.
            if (rawData.VirtualKey == VirtualKeys.Shift)
            {
                flags |= rawData.MakeCode == 0x36 ? KeyboardDataFlags.RightKey : KeyboardDataFlags.LeftKey;
            }

            var data = new GorgonRawKeyboardData
            {
                ScanCode = rawData.MakeCode,
                Key      = (Keys)rawData.VirtualKey,
                Flags    = flags
            };

            device.ProcessData(ref data);
        }