public static IHardwareKeyMappingTarget ConvertPressedKey(KeyEventArgs keyEventArgs, KeyboardDevice keyboardDevice) { var pressedKey = keyEventArgs.Key; // To be more precise, that's the key that has been pressed and is now released var otherKeysPressed = EnumExtensions.GetValues <Key>() .Where(key => key != Key.None) .Where(key => (keyboardDevice.GetKeyStates(key) & KeyStates.Down) != 0) .ToList(); var modifierKeys = otherKeysPressed.Where(ModifierKeys.ContainsKey).ToList(); // Only valid if key is known! var valid = KeyMapping.ContainsKey(pressedKey); if (!valid) { return(null); } // Ignore other regular keys, but take into account modifiers var modifiers = modifierKeys .Select(key => ModifierKeys[key]) .Aggregate(Modifier.None, (mod, acc) => mod | acc); var pressedConvertedKey = new HardwareKeyMappingTarget(KeyMapping[pressedKey], modifiers); return(pressedConvertedKey); }
private static bool TryImportUnprintableMapping( string mappingTarget, KeyboardKey keyboardKey, out IKeyboardKeyMapping keyMapping) { var parseSuccess = HardwareKeyMappingTarget.TryImport(mappingTarget, out HardwareKeyMappingTarget unprintable); keyMapping = parseSuccess ? new KeyMapping(keyboardKey, unprintable) : null; return(parseSuccess); }