private void KeyboardHook_KeyDown(object sender, KeyEventArgs args) { //Console.WriteLine($"DOWN control: {args.Control} alt: {args.Alt} shift: {args.Shift} keycode: {args.KeyCode} keydata: {args.KeyData} modifiers: {args.Modifiers} suppressKeyPress: {args.SuppressKeyPress}"); if (pressedHotkey != null) { return; } Func <bool> doesRegisteredHotkeysHaveAny = () => { return(registeredHotkeys.Any(x => { var keyArgs = x.Value.KeyEventArgs; //if (Enum.TryParse(Enum.GetName(typeof(EKeyboardModifier), keyArgs.Modifier), out Keys modifier)) { if ((ushort)args.KeyData == (ushort)keyArgs.KeyCode && (int)args.Modifiers == /*modifier*/ (int)keyArgs.Modifiers) { pressedHotkey = x.Value; return true; } //} // return false; })); }; if (doesRegisteredHotkeysHaveAny()) { pressedHotkey.Invoke(EHotkeyState.Down); keyboardHook.KeyDown -= KeyboardHook_KeyDown; keyboardHook.KeyUp += KeyboardHook_KeyUp; } }
public KeyboardHookManager(System.Reflection.Assembly executingAssembly) { keyboardHook = new KeyboardHook(executingAssembly); keyboardHook.KeyDown += KeyboardHook_KeyDown; registeredHotkeys = new Dictionary <int, TParentHotkeyInvoker>(); pressedHotkey = null; }
public static TParentHotkeyInvoker Create(int id, TKeyEventArgs keyEventArgs, Action <TChildHotkey> unregister) { var hotkeyInvoker = new TParentHotkeyInvoker(id, keyEventArgs, out Action <EHotkeyState> invokeHotkey, unregister); hotkeyInvoker.Invoke = invokeHotkey; return(hotkeyInvoker); }
private void releaseKeyDown() { var _pressedHotkey = pressedHotkey; pressedHotkey = null; _pressedHotkey.Invoke(EHotkeyState.Up); keyboardHook.KeyUp -= KeyboardHook_KeyUp; keyboardHook.KeyDown += KeyboardHook_KeyDown; }
/// <summary> /// Registers a hotkey. To register only a modifier: set it as <see cref="TKeyEventArgs.KeyCode"/>. /// </summary> /// <param name="args"></param> /// <returns>Hotkey id. You have to unregister it.</returns> public TChildHotkey RegisterHotkey(TKeyEventArgs args) { TParentHotkeyInvoker hotkeyInvoker = null; if (!registeredHotkeys.Any((x) => { if (x.Value.KeyEventArgs.Modifiers == args.Modifiers && x.Value.KeyEventArgs.KeyCode == args.KeyCode) { hotkeyInvoker = x.Value; return(true); } // return(false); })) { if (registeredHotkeys.Count == 0) { start(); } int id = 0; do { id++; } while (registeredHotkeys.Any(x => x.Value.Id == id)); hotkeyInvoker = TParentHotkeyInvoker.Create(id, args, (childHotkey) => UnregisterHotkey(id)); registeredHotkeys.Add(id, hotkeyInvoker); return(hotkeyInvoker.RegisterChildren()); } else { hotkeyInvoker.Counter++; return(hotkeyInvoker.RegisterChildren()); } }