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));
        }
Пример #2
0
        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));
        }