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