예제 #1
0
        /// <summary>
        /// キーボードが離されたときのグローバルフック
        /// </summary>
        /// <param name="key">離されたキー</param>
        /// <returns>ハンドリング完了の場合に true を返します。</returns>
        private bool OnKeyUp(User32.VKs key)
        {
            this._modifierKeys &= ~(key.ToModifierKeys());

            if (key.IsModifierKey())
            {
                // Shift/Ctrl/Alt/Windows が離された

                if (this._isModifierKeyDown)
                {
                    if (this._modifierKeys == ModifierKeys.None)
                    {
                        // Shift/Ctrl/Alt/Windows が押された状態で
                        // 他のキーが押されていなかったとき
                        // 他の Shift/Ctrl/Alt/Windows の操作ではなく
                        // 単独で Shift/Ctrl/Alt/Windows が離されたときに
                        // Shift/Ctrl/Alt/Windows を Poppin' する
                        RaiseKeyUp(key, this._modifierKeys);
                        this._isModifierKeyDown = false;
                    }
                }
            }
            else
            {
                // Shift/Ctrl/Alt/Windows 以外が離された

                RaiseKeyUp(key, this._modifierKeys);
            }

            this._downKeys.Remove(key);

            return(false);
        }
예제 #2
0
        /// <summary>
        /// キーボードが押されたときのグローバルフック
        /// </summary>
        /// <param name="key">押されたキー</param>
        /// <returns>ハンドリング完了の場合に true を返します。</returns>
        private bool OnKeyDown(User32.VKs key)
        {
            if (this._downKeys.Contains(key))
            {
                return(false);
            }

            if (key.IsModifierKey())
            {
                // Shift/Ctrl/Alt/Windows が押された
                this._isModifierKeyDown = true;
            }
            else
            {
                // Shift/Ctrl/Alt/Windows 以外が押された
                this._isModifierKeyDown = false;
            }

            this._modifierKeys |= key.ToModifierKeys();
            this._downKeys.Add(key);

            return(false);
        }