/// <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); } }
/// <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); } }