入力時にユーザーが各キーを押している時間を監視する必要があります。これまでのところ、keyBoard イベント ハンドラーを使用して、ストップウォッチを e.KeyDown で開始し、e.KeyUp で停止しました。これは、ユーザーが一度に 2 つのボタンを押したままにするまでは正常に機能します。たとえば、大文字にするときに 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
私の質問; 特定のキーごとにイベントを書き込まずに、各キーのタイミングを効率的に追跡する方法はありますか?
編集:私が言おうとしているのは、同時に押された場合に2つのキーのタイミングを個別に追跡することはできないということです