コード例 #1
0
        /// <summary>
        /// 指定されたキーの観察
        /// </summary>
        private void WatchKeys()
        {
            int           intervalSum = 0;
            KeyStateValue target      = _keyStateValueList.First;

            while (stopFlag)
            {
                if (WatchKey(target.KeyCode))
                {
                    target.Record();
                    target = target.Next;

                    // 押下判定
                    if (target.IsTerminal) // 最後のキーが押下されたか?
                    {
                        // 全入力の時間が閾値以下である事
                        if ((_keyStateValueList.Last.Time - _keyStateValueList.First.Time) < _thresholdTimeSpan)
                        {
                            // 見つかったらコールバック
                            KeyPushed(this, new KeyWatcherEventArgs(_keyCodeArray));
                        }
                        intervalSum = 0;
                        target      = _keyStateValueList.First;
                    }
                }
                else
                {
                    // 見つからない場合はウェイトする
                    Thread.Sleep(_interval);
                    intervalSum += _interval;
                }

                // 一定期間内に見つからない場合は最初に戻る
                if (intervalSum >= _threshold)
                {
                    intervalSum = 0;
                    target      = _keyStateValueList.First;
                }
            }
        }
コード例 #2
0
ファイル: KeyState.cs プロジェクト: esca18/Component
 public void SetKeyState(int test)
 {
     currentState = (KeyStateValue)test;
 }
コード例 #3
0
ファイル: KeyState.cs プロジェクト: esca18/Component
 public void SetKeyCancle()
 {
     currentState = KeyStateValue.none;
 }