我想构建一个简单的C#Windows窗体应用程序来收集用户的击键数据。如何收集使用C#的按键时间信息?
基本上,用户需要输入一个长度为10的单词。我想记录每个按键的保持时间,keydown到keydown时间,keyup和keydown用于相邻按键(所以有10 + 9 + 9 = 28个测量)。
任何人都可以告诉我如何使用文本框事件捕获此信息?
在此先感谢
我想构建一个简单的C#Windows窗体应用程序来收集用户的击键数据。如何收集使用C#的按键时间信息?
基本上,用户需要输入一个长度为10的单词。我想记录每个按键的保持时间,keydown到keydown时间,keyup和keydown用于相邻按键(所以有10 + 9 + 9 = 28个测量)。
任何人都可以告诉我如何使用文本框事件捕获此信息?
在此先感谢
您可以处理你的TextBox
KeyUp
和KeyDown
事件。您可以使用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);
}
谢谢,我认为它可以工作。我试图忽略不好的输入。你知道如何使用KeyEventArgs.KeyValue吗?是“string ch =((Char)e.KeyCode).ToString()”是否正确? –
我怀疑铸造'(Char)e.KeyCode'将工作。 'KeyCode'返回'Keys'枚举值。你想达到什么目的?要过滤特定的字符,你可以使用'e.KeyCode!= Keys.A'。 –
用户的输入应该是长度为10的固定单词(如“abcdefghij”)。所以我需要检查用户是否按右键。我不想使用if(e.KeyCode!= keys.A && e.KeyCode!= Keys.B && ......)这样的长条件。 –
你做工作? –
如果你必须经常处理这类事情,并且感觉很勇敢,那么可以看看Reactive Extensions(http://msdn.microsoft.com/en-us/data/gg577609.aspx)。这几乎就是它发明的。 –