2013-11-25 3 views
0

Я хочу создать простое приложение C# для Windows Form, которое собирает данные о нажатиях клавиш пользователя.Как собирать информацию о времени нажатия клавиш с помощью C#?

В принципе, пользователю необходимо ввести слово длиной 10. Я хочу записать время удержания каждой клавиши, время нажатия клавиш и время нажатия клавиш и нажатия клавиш для смежных нажатий клавиш (так что есть 10 + 9 + 9 = 28 измерений).

Может ли кто-нибудь сказать мне, как захватить эту информацию, используя события текстового окна?

Заранее спасибо

+0

ли вы сделать его работу? –

+0

Если вам приходится часто работать с такими вещами, и вы чувствуете себя храбрым, вы можете взглянуть на реактивные расширения (http://msdn.microsoft.com/en-us/data/gg577609.aspx). Это в значительной степени то, для чего он был изобретен. –

ответ

4

Вы можете обрабатывать KeyUp и KeyDown события на TextBox. Вы можете получить текущую временную метку, используя DateTime.Now.

магазин ваш последний KeyUp и KeyDown события времени и добавить измерения, как это:

private DateTime? keyUpTime = null; 
private DateTime? keyDownTime = null; 

private List<double> keyDownKeyUpMeasurements = new List<double>(); 
private List<double> keyDownKeyDownMeasurements = new List<double>(); 
private List<double> keyUpKeyDownMeasurements = new List<double>(); 

private void textBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    DateTime prevKeyDownTime = keyDownTime; 
    keyDownTime = DateTime.Now; 

    if (prevKeyDownTime != null) 
    { 
     keyDownKeyDownMeasurements 
      .Add(keyDownTime.Subtract(prevKeyDownTime).TotalMilliseconds); 
    } 

    if (keyUpTime != null) 
    { 
     keyUpKeyDownMeasurements 
      .Add(keyDownTime.Subtract(keyUpTime).TotalMilliseconds); 
    } 
} 

private void textBox_KeyUp(object sender, KeyEventArgs e) 
{ 
    keyUpTime = DateTime.Now; 
    keyDownKeyUpMeasurements 
     .Add(keyUpTime.Subtract(keyDownTime).TotalMilliseconds); 
} 
+0

Спасибо, я думаю, он может работать. Я пытаюсь игнорировать плохой вход. Вы знаете, как использовать KeyEventArgs.KeyValue? Является ли строка ch = ((Char) e.KeyCode) .ToString() "правильной? –

+0

Сомневаюсь, что cast '(Char) e.KeyCode' будет работать. 'KeyCode' возвращает значение перечисления' Keys'. Чего вы пытаетесь достичь? Чтобы фильтровать определенные символы, вы можете использовать что-то вроде 'e.KeyCode! = Keys.A'. –

+0

Вход пользователя должен быть фиксированным словом длиной 10 (например, «abcdefghij»). Так что мне нужно проверить, нажимает ли пользователь правую клавишу. Я не хочу использовать длинное условие, например if (e.KeyCode! = Keys.A && e.KeyCode! = Keys.B && ......) –

Смежные вопросы