コード例 #1
0
ファイル: KeyboardHelper.cs プロジェクト: lixingx86/Catel
        /// <summary>
        /// Determines whether the specified keyboard modifiers are currently pressed.
        /// </summary>
        /// <param name="modifier">One or more keyboard modifiers.</param>
        /// <param name="checkForExactModifiers">if set to <c>true</c>, this check requires the exact modifiers to be pressed.</param>
        /// <returns><c>true</c> if all the specified keyboard modifiers are being pressed; otherwise, <c>false</c>.</returns>
        public static bool AreKeyboardModifiersPressed(ModifierKeys modifier, bool checkForExactModifiers = true)
        {
            var allModifiers = Enum <ModifierKeys> .GetValues();

            allModifiers.Remove(ModifierKeys.None);

            var currentlyPressedModifiers = GetCurrentlyPressedModifiers();

            if (checkForExactModifiers)
            {
                if (modifier == ModifierKeys.None)
                {
                    if (currentlyPressedModifiers.Count > 0)
                    {
                        if (currentlyPressedModifiers[0] != ModifierKeys.None)
                        {
                            return(false);
                        }
                    }
                }
            }

            if (checkForExactModifiers)
            {
                foreach (var currentlyPressedModifier in currentlyPressedModifiers)
                {
                    if (!Enum <ModifierKeys> .Flags.IsFlagSet(modifier, currentlyPressedModifier))
                    {
                        // Pressed but not expected
                        return(false);
                    }
                }
            }

            foreach (var modifierToCheck in allModifiers)
            {
                if (Enum <ModifierKeys> .Flags.IsFlagSet(modifier, modifierToCheck))
                {
                    // Key is expected, checking if it is pressed
                    if (!currentlyPressedModifiers.Contains(modifierToCheck))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
コード例 #2
0
        /// <summary>
        /// Determines whether the specified keyboard modifiers are currently pressed.
        /// </summary>
        /// <param name="modifier">One or more keyboard modifiers.</param>
        /// <param name="checkForExactModifiers">if set to <c>true</c>, this check requires the exact modifiers to be pressed.</param>
        /// <returns><c>true</c> if all the specified keyboard modifiers are being pressed; otherwise, <c>false</c>.</returns>
        public static bool AreKeyboardModifiersPressed(ModifierKeys modifier, bool checkForExactModifiers = true)
        {
            var allModifiers = Enum<ModifierKeys>.GetValues();
            var currentlyPressedModifiers = GetCurrentlyPressedModifiers();

            if (checkForExactModifiers)
            {
                if (modifier == ModifierKeys.None)
                {
                    if (currentlyPressedModifiers.Count > 0)
                    {
                        if (currentlyPressedModifiers[0] != ModifierKeys.None)
                        {
                            return false;
                        }
                    }
                }
            }

            if (checkForExactModifiers)
            {
                foreach (var currentlyPressedModifier in currentlyPressedModifiers)
                {
                    if (!Enum<ModifierKeys>.Flags.IsFlagSet(modifier, currentlyPressedModifier))
                    {
                        // Pressed but not expected
                        return false;
                    }
                }
            }

            foreach (var modifierToCheck in allModifiers)
            {
                if (Enum<ModifierKeys>.Flags.IsFlagSet(modifier, modifierToCheck))
                {
                    // Key is expected, checking if it is pressed
                    if (!currentlyPressedModifiers.Contains(modifierToCheck))
                    {
                        return false;
                    }
                }
            }

            return true;
        }
コード例 #3
0
ファイル: KeyboardHelper.cs プロジェクト: SOHODeveloper/Catel
        /// <summary>
        /// Determines whether the specified keyboard modifiers are currently pressed.
        /// </summary>
        /// <param name="modifier">One or more keyboard modifiers.</param>
        /// <returns><c>true</c> if all the specified keyboard modifiers are being pressed; otherwise, <c>false</c>.</returns>
        public static bool AreKeyboardModifiersPressed(ModifierKeys modifier)
        {
            var keys = Enum <ModifierKeys> .GetValues();

            foreach (var key in keys)
            {
                if (Enum <ModifierKeys> .Flags.IsFlagSet(modifier, key))
                {
#if NETFX_CORE
                    var coreWindow = CoreWindow.GetForCurrentThread();

                    switch (key)
                    {
                    case ModifierKeys.None:
                        break;

                    case ModifierKeys.Control:
                        if ((coreWindow.GetKeyState(VirtualKey.Control) == CoreVirtualKeyStates.None) &&
                            (coreWindow.GetKeyState(VirtualKey.LeftControl) == CoreVirtualKeyStates.None) &&
                            (coreWindow.GetKeyState(VirtualKey.RightControl) == CoreVirtualKeyStates.None))
                        {
                            return(false);
                        }
                        break;

                    case ModifierKeys.Menu:
                        if ((coreWindow.GetKeyState(VirtualKey.Menu) == CoreVirtualKeyStates.None) &&
                            (coreWindow.GetKeyState(VirtualKey.LeftMenu) == CoreVirtualKeyStates.None) &&
                            (coreWindow.GetKeyState(VirtualKey.RightMenu) == CoreVirtualKeyStates.None))
                        {
                            return(false);
                        }
                        break;

                    case ModifierKeys.Shift:
                        if ((coreWindow.GetKeyState(VirtualKey.Shift) == CoreVirtualKeyStates.None) &&
                            (coreWindow.GetKeyState(VirtualKey.LeftShift) == CoreVirtualKeyStates.None) &&
                            (coreWindow.GetKeyState(VirtualKey.RightShift) == CoreVirtualKeyStates.None))
                        {
                            return(false);
                        }
                        break;

                    case ModifierKeys.Windows:
                        if ((coreWindow.GetKeyState(VirtualKey.LeftWindows) == CoreVirtualKeyStates.None) &&
                            (coreWindow.GetKeyState(VirtualKey.RightWindows) == CoreVirtualKeyStates.None))
                        {
                            return(false);
                        }
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
#else
                    if (!Enum <ModifierKeys> .Flags.IsFlagSet(Keyboard.Modifiers, key))
                    {
                        return(false);
                    }
#endif
                }
            }

            return(true);
        }
コード例 #4
0
ファイル: KeyboardHelper.cs プロジェクト: paytonli2013/Catel
        /// <summary>
        /// Determines whether the specified keyboard modifiers are currently pressed.
        /// </summary>
        /// <param name="modifier">One or more keyboard modifiers.</param>
        /// <returns><c>true</c> if all the specified keyboard modifiers are being pressed; otherwise, <c>false</c>.</returns>
        public static bool AreKeyboardModifiersPressed(ModifierKeys modifier)
        {
            var keys = Enum<ModifierKeys>.GetValues();
            foreach (var key in keys)
            {
                if (Enum<ModifierKeys>.Flags.IsFlagSet(modifier, key))
                {
#if NETFX_CORE
                    var coreWindow = CoreWindow.GetForCurrentThread();

                    switch (key)
                    {
                        case ModifierKeys.None:
                            break;

                        case ModifierKeys.Control:
                            if ((coreWindow.GetKeyState(VirtualKey.Control) == CoreVirtualKeyStates.None) &&
                                (coreWindow.GetKeyState(VirtualKey.LeftControl) == CoreVirtualKeyStates.None) &&
                                (coreWindow.GetKeyState(VirtualKey.RightControl) == CoreVirtualKeyStates.None))
                            {
                                return false;
                            }
                            break;

                        case ModifierKeys.Menu:
                            if ((coreWindow.GetKeyState(VirtualKey.Menu) == CoreVirtualKeyStates.None) &&
                                (coreWindow.GetKeyState(VirtualKey.LeftMenu) == CoreVirtualKeyStates.None) &&
                                (coreWindow.GetKeyState(VirtualKey.RightMenu) == CoreVirtualKeyStates.None))
                            {
                                return false;
                            }
                            break;

                        case ModifierKeys.Shift:
                            if ((coreWindow.GetKeyState(VirtualKey.Shift) == CoreVirtualKeyStates.None) &&
                                (coreWindow.GetKeyState(VirtualKey.LeftShift) == CoreVirtualKeyStates.None) &&
                                (coreWindow.GetKeyState(VirtualKey.RightShift) == CoreVirtualKeyStates.None))
                            {
                                return false;
                            }
                            break;

                        case ModifierKeys.Windows:
                            if ((coreWindow.GetKeyState(VirtualKey.LeftWindows) == CoreVirtualKeyStates.None) &&
                                (coreWindow.GetKeyState(VirtualKey.RightWindows) == CoreVirtualKeyStates.None))
                            {
                                return false;
                            }
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                    }
#else
                    if (!Enum<ModifierKeys>.Flags.IsFlagSet(Keyboard.Modifiers, key))
                    {
                        return false;
                    }
#endif
                }
            }

            return true;
        }