private void ReceiverOnKeyReceived(object sender, KeyEventArgs keyEventArgs) { if (keyEventArgs.KeyState == KeyState.KeyDown) { return; } if (RegisteredKeys.IsModalKey(keyEventArgs.Key)) { return; } var modifiers = KeyModifier.None; if (_monitor.GetKeyState(Key.LeftCtrl) == KeyState.KeyDown) { modifiers |= KeyModifier.LCtrl; } if (_monitor.GetKeyState(Key.RightCtrl) == KeyState.KeyDown) { modifiers |= KeyModifier.RCtrl; } if (_monitor.GetKeyState(Key.LeftShift) == KeyState.KeyDown) { modifiers |= KeyModifier.LShift; } if (_monitor.GetKeyState(Key.RightShift) == KeyState.KeyDown) { modifiers |= KeyModifier.RShift; } if (_monitor.GetKeyState(Key.LeftAlt) == KeyState.KeyDown) { modifiers |= KeyModifier.LAtl; } if (_monitor.GetKeyState(Key.RightAlt) == KeyState.KeyDown) { modifiers |= KeyModifier.RAlt; } if (_monitor.GetKeyState(Key.LWin) == KeyState.KeyDown) { modifiers |= KeyModifier.LWin; } if (_monitor.GetKeyState(Key.RWin) == KeyState.KeyDown) { modifiers |= KeyModifier.RWin; } RaiseKeyCombinationReceived(new KeyCombination(keyEventArgs.Key, modifiers)); }
public void ModalKeyShouldBeDownDuringReleasingKeyCombination() { var actual = KeyState.KeyUp; var are = new AutoResetEvent(false); _receiver.KeyReceived += (sender, args) => { if (args.Key == Key.S && args.KeyState == KeyState.KeyUp) { actual = _monitor.GetKeyState(Key.LeftCtrl); are.Set(); } }; _sender.Send(new[] { new KeyEventArgs(Key.LeftCtrl, KeyState.KeyDown) }); _sender.Send(new[] { new KeyEventArgs(Key.S, KeyState.KeyDown) }); _sender.Send(new[] { new KeyEventArgs(Key.S, KeyState.KeyUp) }); _sender.Send(new[] { new KeyEventArgs(Key.LeftCtrl, KeyState.KeyUp) }); are.WaitOne(100); Assert.That(actual, Is.EqualTo(KeyState.KeyDown)); }