private void OnKeyUp(object sender, IKeyboardHookEventArgs e) { var isModifier = false; if (_leftModifierMappings.TryGetValue(e.Key, out var modifier)) { _leftModifiers = _leftModifiers ^ modifier; Modifiers = _leftModifiers | _rightModifiers; isModifier = true; } else if (_rightModifierMappings.TryGetValue(e.Key, out modifier)) { _rightModifiers = _rightModifiers ^ modifier; Modifiers = _leftModifiers | _rightModifiers; isModifier = true; } _pressed.Remove(e.Key); var args = new KeyTrackerEventArgs { Handled = e.Handled, Key = e.Key, IsModifier = isModifier }; KeyUnpressed?.Invoke(this, args); e.Handled = args.Handled; }
/// <summary>키보드 후킹 콜백</summary> private static int Callback(int nCode, int wParam, ref KeyData lParam) { if (0 <= nCode) { var next = true; if (wParam == WM_KEYDOWN) { KeyPressed?.Invoke((Keys)lParam.vkCode, ref next); } else if (wParam == WM_KEYUP) { KeyUnpressed?.Invoke((Keys)lParam.vkCode, ref next); } if (!next) { return(1); // } } return(CallNextHookEx(hHook, nCode, wParam, ref lParam)); }