public void AddFilter(Keys KeyCode, bool Ctrl, bool Alt, bool Shift) { KeyStroke newFilter = new KeyStroke(); newFilter.KeyCode = KeyCode; newFilter.Shift = Shift; newFilter.Alt = Alt; newFilter.Ctrl = Ctrl; m_Filters.Add(newFilter); }
private bool CheckFilters(KeyStroke state) { if (m_Filters.Count == 0) return true; foreach (KeyStroke filter in m_Filters) { if (filter.IsMatch(state)) return true; } return false; }
private void KeyboardHook_HookInvoked(object sender, HookEventArgs e) { try { if (e.HookCode != 0) return; KeyStroke key = new KeyStroke(); key.KeyCode = (Keys)e.wParam.ToInt32(); key.Shift = GetKeyState(VirtualKeys.VK_SHIFT) <= -127; key.Alt = GetKeyState(VirtualKeys.VK_MENU) <= -127; key.Ctrl = GetKeyState(VirtualKeys.VK_CONTROL) <= -127; KeyboardHookEventArgs keyboardEventArgs = new KeyboardHookEventArgs(key); KeyboardMessageFlags kmf = new KeyboardMessageFlags(e.lParam.ToInt32()); if (CheckFilters(key) && !kmf.IsBeingReleased) { OnKeyPressed (keyboardEventArgs); } } catch (Exception) { } }
/// <summary> /// Checks if the given keystroke matches the filter. /// Matching /// </summary> /// <param name="keystroke"></param> /// <returns></returns> public bool IsMatch(KeyStroke keystroke) { return this.KeyCode == Keys.None ? true : keystroke.KeyCode == this.KeyCode && keystroke.Ctrl == this.Ctrl && keystroke.Alt == this.Alt && keystroke.Shift == this.Shift; }
public KeyboardHookEventArgs(KeyStroke Key) { this.KeyStroke = Key; }