コード例 #1
0
        /// <summary>
        /// Handles a keyboard event based on the KeyboardParams it receives
        /// </summary>
        /// <param name="keyboardParamsObj">KeyboardParams struct (object type to comply with QueueUserWorkItem)</param>
        private void HandleSingleKeyboardInput(object keyboardParamsObj)
        {
            Debug.WriteLine("Help!");

            var keyboardParams = (KeyboardParams)keyboardParamsObj;
            var wParam         = keyboardParams.wParam;
            var vkCode         = keyboardParams.vkCode;

            var modifierKey = ModifierKeysUtilities.GetModifierKeyFromCode(vkCode);

            if (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN)
            {
                if (modifierKey != null)
                {
                    lock (this._modifiersLock)
                    {
                        this._downModifierKeys.Add(modifierKey.Value);
                    }
                }
            }

            if (wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYUP)
            {
                if (modifierKey != null)
                {
                    lock (this._modifiersLock)
                    {
                        this._downModifierKeys.Remove(modifierKey.Value);
                    }
                }

                this.HandleKeyPress(vkCode);
            }
        }
コード例 #2
0
        /// <summary>
        /// Handles a keyboard event based on the KeyboardParams it receives
        /// </summary>
        /// <param name="keyboardParamsObj">KeyboardParams struct (object type to comply with QueueUserWorkItem)</param>
        private void HandleSingleKeyboardInput(object keyboardParamsObj)
        {
            var keyboardParams = (KeyboardParams)keyboardParamsObj;
            var wParam         = keyboardParams.wParam;
            var vkCode         = keyboardParams.vkCode;

            var modifierKey = ModifierKeysUtilities.GetModifierKeyFromCode(vkCode);

            // If the keyboard event is a KeyDown event (i.e. key pressed)
            if (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN)
            {
                // In this case, we only care about modifier keys
                if (modifierKey != null)
                {
                    lock (this._modifiersLock)
                    {
                        this._downModifierKeys.Add(modifierKey.Value);
                    }
                }

                // Trigger callbacks that are registered for this key, but only once per key press
                if (!this._downKeys.Contains(vkCode))
                {
                    this.HandleKeyPress(vkCode);
                    this._downKeys.Add(vkCode);
                }
            }

            // If the keyboard event is a KeyUp event (i.e. key released)
            if (wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYUP)
            {
                // If the released key is a modifier key, remove it from the HashSet of modifier keys
                if (modifierKey != null)
                {
                    lock (this._modifiersLock)
                    {
                        this._downModifierKeys.Remove(modifierKey.Value);
                    }
                }

                this._downKeys.Remove(vkCode);
            }
        }