c # Измеряет интервал между вводом клавиш на клавиатуре и вводом клавиш?

#c# #timer #keydown #keyup

#c# #таймер #нажатие клавиши #ввод

Вопрос:

Я хочу измерить время (секунды), когда пользователь нажимает клавишу со стрелкой вправо на клавиатуре и поднимает ее.

Я исследовал это и нашел какую-то страницу, но хорошего ответа нет.

Как я могу измерить это время?

мой код

Я определяю список в верхней части класса:

 List<int> date_down = new List<int>();
  

когда пользователь нажимает клавишу со стрелкой вправо: (в методе Form_KeyDown)

 if (Keyboard.IsKeyDown(Key.Right))
{
    date_down.Add(DateTime.Now.Second);
}
  

когда пользователь нажимает клавишу со стрелкой вправо и удерживает нажатой, время добавляется в список

когда пользователь нажимает клавишу (в методе Form_keyUp)

 if (e.Key == Key.Right)
{
    var second = DateTime.Now.Second - date_down[0];
}
  

Комментарии:

1. Можете ли вы включить код или конкретные примеры того, что вы пробовали до сих пор? Можете ли вы также более конкретно рассказать о проблеме, которую вы пытаетесь решить? Вы хотите измерить это в своем приложении, на компьютере, например, с помощью кейлоггера? Это в игровой ситуации или просто бизнес-приложение?

2. Запустите секундомер при нажатии клавиши, завершите его при нажатии клавиши. Вычислите разницу.

3. @NicholausLawson я пишу свой код. я хочу использовать это для перемотки фильма вперед или назад.

Ответ №1:

Это может быть альтернативой

 using System.Diagnostics;
using System.Windows.Forms;

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();

        var watch = new Stopwatch();
        KeyDown  = (s, e) => watch.Start();
        KeyUp  = (s, e) => { 
            watch.Stop();
            var elapsed = watch.ElapsedMilliseconds;    // Duration
            watch.Reset();
        };
    }
}
  

Комментарии:

1. Это лучшая и наиболее точная альтернатива!

2. Хороший ответ и, честно говоря, более полезный, чем мой, если вы ищете конкретный пример для изучения.

Ответ №2:

Ваш код — хорошее начало, хотя вам, возможно, придется немного изменить его, чтобы увидеть, что он работает.

 private void form1_KeyDown(object sender, System.Windows.Forms.KeyPressEventArgs e)
{        
    if (e.Key == Key.Right)
    {
        date_down = DateTime.Now;
    }
    e.Handled = true;
}

private void form1_KeyUp(object sender, System.Windows.Forms.KeyPressEventArgs e)
{ 
    if (e.Key == Key.Right)
    {
        var timeDelta = DateTime.Now - date_down;
    }
}
  

Вы также можете запустить таймер из этого, если хотите, вместо того, чтобы захватывать текущее время и оценивать.

Комментарии:

1. Код в этом ответе будет работать по назначению только один раз.

Ответ №3:

Вы могли бы начать с поиска различных классов для измерения времени в C #, таких как этот.

Вам также понадобится класс для определения нажатия клавиш вниз и вверх. Возможно, это могло бы помочь.

Помимо этого, реализация должна быть довольно простой. Запускает таймер, когда клавиша нажата, останавливает таймер, когда клавиша отпущена, и использует это время в качестве измерения между двумя событиями.

Комментарии:

1. спасибо, но как я могу запускать и останавливать таймер и измерять время между этим? у вас есть какой-нибудь пример кода?

2. @saedbfd Я просмотрел твою правку. Обратите внимание на список. Метод Add добавит значение в конец списка, а не в начало. Итак, в вашей текущей реализации всякий раз, когда вы нажимаете клавишу, он сравнивает ее с первым нажатием клавиши, а не с последним.