I want to build a simple C# Windows Form Application that gathers user's keystrokes data.
Basically, the user needs to type in a word with length 10. I want to record each key's holding time, keydown to keydown time and keyup and keydown for adjacent keystrokes (so there are 10 + 9 + 9 = 28 measurements).
Could anyone tell me how to capture this information using text box events?
Thanks in advance
You can handle KeyUp
and KeyDown
events on your TextBox
. You can get current timestamp using DateTime.Now
.
Store your last KeyUp
and KeyDown
events time and add measurements like this:
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);
}