如何使用C#收集击键的计时信息?

如何使用C#收集击键的计时信息?,c#,keystroke,time-measurement,C#,Keystroke,Time Measurement,我想构建一个简单的C#Windows表单应用程序,用于收集用户的击键数据 基本上,用户需要输入长度为10的单词。我想记录每个键的保持时间,keydown到keydown的时间,以及相邻击键的keypup和keydown(因此有10+9+9=28个测量值) 有人能告诉我如何使用文本框事件捕获这些信息吗 提前感谢您可以在文本框上处理键控和键控事件。您可以使用DateTime.Now获取当前时间戳 存储上次的KeyUp和KeyDown事件时间,并添加如下测量值: private DateTime? k

我想构建一个简单的C#Windows表单应用程序,用于收集用户的击键数据

基本上,用户需要输入长度为10的单词。我想记录每个键的保持时间,keydown到keydown的时间,以及相邻击键的keypup和keydown(因此有10+9+9=28个测量值)

有人能告诉我如何使用文本框事件捕获这些信息吗


提前感谢

您可以在
文本框
上处理
键控
键控
事件。您可以使用
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);
}
私人日期时间?keyUpTime=null;
私人约会时间?keyDownTime=null;
private List keyDownKeyUpMeasurements=new List();
private List KeyDownMeasurements=新列表();
private List keyUpKeyDownMeasurements=新列表();
私有void文本框\u KeyDown(对象发送方,KeyEventArgs e)
{
DateTime prevKeyDownTime=keyDownTime;
keydowtime=DateTime.Now;
如果(prevKeyDownTime!=null)
{
向下键测量
.Add(keyDownTime.减法(prevKeyDownTime.Total毫秒);
}
if(keyUpTime!=null)
{
KeyUpKeyDown测量
.Add(keyDownTime.Subtract(keyUpTime.Total毫秒));
}
}
私有void文本框\u KeyUp(对象发送方,KeyEventArgs e)
{
keyUpTime=DateTime.Now;
KeyDownKeyUp测量
.Add(keyUpTime.Subtract(keyDownTime.Total毫秒));
}

您可以在
文本框上处理
按键向上
按键向下
事件。您可以使用
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);
}
私人日期时间?keyUpTime=null;
私人约会时间?keyDownTime=null;
private List keyDownKeyUpMeasurements=new List();
private List KeyDownMeasurements=新列表();
private List keyUpKeyDownMeasurements=新列表();
私有void文本框\u KeyDown(对象发送方,KeyEventArgs e)
{
DateTime prevKeyDownTime=keyDownTime;
keydowtime=DateTime.Now;
如果(prevKeyDownTime!=null)
{
向下键测量
.Add(keyDownTime.减法(prevKeyDownTime.Total毫秒);
}
if(keyUpTime!=null)
{
KeyUpKeyDown测量
.Add(keyDownTime.Subtract(keyUpTime.Total毫秒));
}
}
私有void文本框\u KeyUp(对象发送方,KeyEventArgs e)
{
keyUpTime=DateTime.Now;
KeyDownKeyUp测量
.Add(keyUpTime.Subtract(keyDownTime.Total毫秒));
}

你成功了吗?如果你必须经常处理这类事情,并且你感到很勇敢,你可以看看反应式扩展()。这正是它被发明的目的。你让它工作了吗?如果你必须经常使用这类东西并且你感觉很勇敢,你可以看看反应式扩展()。这正是它被发明的目的。谢谢,我认为它可以工作。我试图忽略错误的输入。您知道如何使用KeyEventArgs.KeyValue吗?“string ch=((Char)e.KeyCode).ToString()正确吗?我怀疑cast
(Char)e.KeyCode
是否有效
KeyCode
返回
Keys
enum值。你想达到什么目标?要过滤特定字符,可以使用类似
e.KeyCode!=key.A
。用户的输入应该是长度为10的固定单词(如“abcdefghij”)。因此,我需要检查用户是否按了正确的键。我不想使用像if(e.KeyCode!=keys.a&&e.KeyCode!=keys.B&……)这样的长条件,您可以使用
boolstringisalllets=yourString.All(c=>Char.IsLetter(c))。谢谢,我认为它可以工作。我试图忽略错误的输入。您知道如何使用KeyEventArgs.KeyValue吗?“string ch=((Char)e.KeyCode).ToString()正确吗?我怀疑cast
(Char)e.KeyCode
是否有效
KeyCode
返回
Keys
enum值。你想达到什么目标?要过滤特定字符,可以使用类似
e.KeyCode!=key.A
。用户的输入应该是长度为10的固定单词(如“abcdefghij”)。因此,我需要检查用户是否按了正确的键。我不想使用像if(e.KeyCode!=keys.a&&e.KeyCode!=keys.B&……)这样的长条件,您可以使用
boolstringisalllets=yourString.All(c=>Char.IsLetter(c))