コード例 #1
0
        /// <inheritdoc/>>
        public async Task StartProcessingInputEvents()
        {
            lock (_lock)
            {
                if (_isProcessingKeyboardEvents)
                {
                    throw new InvalidOperationException($"{nameof(UserInputHandler)} is already processing keyboard events");
                }

                _isProcessingKeyboardEvents = true;
            }

            using (IKeyboardEventSource keyboard = WindowsInput.Capture.Global.KeyboardAsync())
            {
                using (IMouseEventSource mouse = WindowsInput.Capture.Global.MouseAsync())
                {
                    mouse.ButtonScroll += OnMouseScroll;
                    keyboard.KeyEvent  += OnKeyEvent;
                    mouse.ButtonDown   += (sender, args) => OnMouseOnButtonEvent(args, MouseEventType.KeyDown);
                    mouse.ButtonUp     += (sender, args) => OnMouseOnButtonEvent(args, MouseEventType.KeyUp);

                    _taskCompletionSource = new TaskCompletionSource <bool>();

                    await _taskCompletionSource.Task.ConfigureAwait(false);
                }
            }
        }
コード例 #2
0
        private void Unsubscribe()
        {
            m_Keyboard?.Dispose();
            m_Keyboard = null;

            m_Mouse?.Dispose();
            m_Mouse = null;
        }
コード例 #3
0
        private static async void Listener_Triggered(IKeyboardEventSource Keyboard, object sender, KeyChordEventArgs e)
        {
            var ToSend = WindowsInput.Simulate.Events();

            ToSend.Click("You pressed the magic keys.");

            using (Keyboard.Suspend()) {
                await ToSend.Invoke();
            }
        }
コード例 #4
0
        private void Subscribe(IKeyboardEventSource Keyboard)
        {
            this.m_Keyboard?.Dispose();
            this.m_Keyboard = Keyboard;

            if (Keyboard != default)
            {
                Keyboard.KeyEvent += this.Keyboard_KeyEvent;
            }
        }
コード例 #5
0
        /// <inheritdoc/>
        public async Task <UserInputKey> WaitForKeyPress(bool blockPressedKey = false)
        {
            var taskCompletionSource = new TaskCompletionSource <UserInputKey>();

            using (IKeyboardEventSource keyboard = WindowsInput.Capture.Global.KeyboardAsync())
            {
                using (IMouseEventSource mouse = WindowsInput.Capture.Global.MouseAsync())
                {
                    mouse.ButtonScroll += (_, keyEventArgs) =>
                    {
                        if (keyEventArgs?.Data?.Button != null)
                        {
                            UserInputKey mappedKey = _keyMapper.MapToUserInputKey(keyEventArgs.Data.Offset);
                            if (blockPressedKey)
                            {
                                keyEventArgs.Next_Hook_Enabled = false;
                            }
                            taskCompletionSource.SetResult(mappedKey);
                        }
                    };
                    mouse.ButtonDown += (_, keyEventArgs) =>
                    {
                        if (keyEventArgs?.Data?.Button != null && keyEventArgs.Data.Button != ButtonCode.VScroll && keyEventArgs.Data.Button != ButtonCode.HScroll)
                        {
                            UserInputKey mappedKey = _keyMapper.MapToUserInputKey(keyEventArgs.Data.Button);
                            if (blockPressedKey)
                            {
                                keyEventArgs.Next_Hook_Enabled = false;
                            }
                            taskCompletionSource.SetResult(mappedKey);
                        }
                    };
                    keyboard.KeyEvent += (_, keyEventArgs) =>
                    {
                        if (keyEventArgs?.Data?.KeyDown != null)
                        {
                            UserInputKey mappedKey = _keyMapper.MapToUserInputKey(keyEventArgs.Data.KeyDown.Key);
                            if (blockPressedKey)
                            {
                                keyEventArgs.Next_Hook_Enabled = false;
                            }
                            taskCompletionSource.SetResult(mappedKey);
                        }
                    };

                    return(await taskCompletionSource.Task.ConfigureAwait(false));
                }
            }
        }
コード例 #6
0
        private static async void Listener_Triggered(IKeyboardEventSource Keyboard, object sender, TextSequenceEventArgs e)
        {
            e.Input.Next_Hook_Enabled = false;

            var ToSend = WindowsInput.Simulate.Events();

            for (int i = 1; i < e.Sequence.Text.Length; i++)
            {
                ToSend.Click(WindowsInput.Events.KeyCode.Backspace);
            }

            ToSend.Click("Always ask albert!");

            //We suspend keyboard events because we don't want to accidently trigger a recursive loop if our
            //sending text actually had 'aaa' in it.
            using (Keyboard.Suspend()) {
                await ToSend.Invoke();
            }
        }
コード例 #7
0
 public KeyChordEventSource(IKeyboardEventSource Monitor, ChordClick Chord) : base(Monitor)
 {
     this.Chord = Chord;
 }
コード例 #8
0
 public KeySequenceEventSource(IKeyboardEventSource Monitor, SequenceClick Sequence) : base(Monitor)
 {
     this.Sequence = Sequence;
 }
コード例 #9
0
 public TextSequenceEventSource(IKeyboardEventSource Monitor, TextClick Sequence, StringComparison Comparison) : base(Monitor)
 {
     this.Sequence   = Sequence;
     this.Comparison = Comparison;
 }
コード例 #10
0
 public TextSequenceEventSource(IKeyboardEventSource Monitor, TextClick Sequence) : this(Monitor, Sequence, StringComparison.InvariantCultureIgnoreCase)
 {
 }