我需要监控用户在键入时按住每个键的时间。到目前为止,我已经使用了一个 keyBoard 事件处理程序,并在 e.KeyDown 处启动了秒表,并在 e.KeyUp 处停止了它。在用户同时按住两个按钮之前,这可以正常工作,例如在大写时按住 shift 键。我的代码:
public partial class LoginPage : Form
{
public LoginPage()
{
InitializeComponent();
}
Stopwatch KeyStopWatch = new Stopwatch();
Stopwatch KeyStopWatch2 = new Stopwatch();
private void textBoxUsername_KeyDown(object sender, KeyEventArgs e)
{
KeyStopWatch.Start();
}
private void textBoxUsername_KeyUp(object sender, KeyEventArgs e)
{
KeyStopWatch.Stop();
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Desktop\KeyTimes.txt", true))
{
file.Write(e.KeyCode + " ");
file.WriteLine(KeyStopWatch.ElapsedMilliseconds);
}
KeyStopWatch.Reset();
KeyStopWatch2.Reset();
}
}
这是我得到的示例输出,一个没有大写,另一个没有,顺便说一句,两者都有错误
T 153
H 0
I 89
S 89
Space 111
I 73
S 105
Space 126
A 121
Space 132
T 253
S 0
E 0
T 116
Space 95
T 248
ShiftKey 0
H 89
I 95
S 89
Space 111
I 116
S 100
Space 126
A 111
Space 122
T 407
ShiftKey 0
E 185
S 132
T 84
我的问题; 有没有办法在不为每个特定键编写事件的情况下有效地跟踪每个键的时间?
编辑:我想说的是,如果同时按下,是否可以独立跟踪两个键的时间