/// <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; }
/// <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); }