private void RegisterHotkeys() { WindowsApi.KeyModifiers modifiers = WindowsApi.KeyModifiers.MOD_CONTROL | WindowsApi.KeyModifiers.MOD_NOREPEAT; _hotkeyIdFullGrid = this.Handle.ToInt32() ^ (int)modifiers ^ (int)Keys.D1; _hotkeyIdCrosshair = this.Handle.ToInt32() ^ (int)modifiers ^ (int)Keys.D2; WindowsApi.RegisterHotKey(this.Handle, _hotkeyIdFullGrid, modifiers, Keys.D1); WindowsApi.RegisterHotKey(this.Handle, _hotkeyIdCrosshair, modifiers, Keys.D2); }
/// <summary> /// Verifica se uma tecla de atalho é válida. /// </summary> /// <param name="modifier">Tecla de acesso.</param> /// <param name="key">Tecla comum.</param> /// <returns>Resultado.</returns> private static bool IsValidModifierAndKey(WindowsApi.KeyModifiers modifier, Keys key) { var isValid = true; if (modifier == WindowsApi.KeyModifiers.None) { isValid = false; } else if (!Regex.IsMatch($"{key}", @"^([A-Z]|D[0-9])$")) { isValid = false; } return(isValid); }
/// <summary> /// Extrai os valores individuais para teclas de acesso e tecla comum. /// </summary> /// <param name="shortcut">Tecla de atalho.</param> /// <param name="modifier">Tecla de acesso.</param> /// <param name="key">Tecla comum.</param> private static void ExtractModifierAndKey(Keys shortcut, out WindowsApi.KeyModifiers modifier, out Keys key) { modifier = WindowsApi.KeyModifiers.None; if ((shortcut & Keys.Alt) == Keys.Alt) { modifier |= WindowsApi.KeyModifiers.Alt; } if ((shortcut & Keys.Control) == Keys.Control) { modifier |= WindowsApi.KeyModifiers.Control; } if ((shortcut & Keys.Shift) == Keys.Shift) { modifier |= WindowsApi.KeyModifiers.Shift; } key = shortcut & ~Keys.Alt & ~Keys.Control & ~Keys.Shift; }
/// <summary> /// Registra uma tecla de atalho no sistema operacional para uma janela. /// </summary> /// <param name="hWnd">Handle da janela.</param> /// <param name="id">Identificador da tecla de atalho.</param> /// <param name="modifiers">Modificador</param> /// <param name="key">Tecla</param> /// <returns>Sinaliza sucesso na execução da ação.</returns> public static bool RegisterHotKey(this IntPtr hWnd, int id, WindowsApi.KeyModifiers modifiers, Keys key) { return(WindowsApi.RegisterHotKey(hWnd, id, modifiers, key)); }
/// <summary> /// Evento quando a tecla de atalho é pressionada. /// </summary> /// <param name="modifiers">Teclas de acesso.</param> /// <param name="key">Tecla.</param> private void NativeWindowOnKeyPressed(WindowsApi.KeyModifiers modifiers, Keys key) { _messageBus.Send(new UserActionPoke()); }