コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }