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