2

Delphiプロジェクトでキーが押されている時間を検出し、ユーザーに警告する方法を探しています。

私はチャットプログラムに取り組んでおり、その人がそのチャットボックスにスパムを送信するためにWキーなどの文字を押し続けているかどうかを確認する必要があります。Delphi7で何をしようとしているのかをサンプルで示します。

//Looking up if key in use and held for lets say 20 seconds
if (GetAsyncKeyState(Byte(VkKeyScan('W'))) shl 20) <> 0 then
begin
  ShowMessage('W Key Held down too long!');
end;

ただし、GetAsyncKeyStateがその情報を提供するかどうかはわかりません。そうでない場合、どうなりますか?

4

2 に答える 2

4

Windows は、キーが押されている期間を報告しませんWM_KEY...。押されたキーに対して同じメッセージが繰り返されていることだけを報告します。手動で期間を追跡する必要があります。WM_KEYDOWNビット 30 が 1 に設定されたメッセージを検出したときに、wParamそのキーをまだ追跡していない場合は、追跡を開始して現在のシステム/ティックを保存します。それ以外の場合は、現在のシステム/ティック時間を取得し、期間を計算して対処しますによると。メッセージを受信したらWM_KEYUP、追跡している場合はそのキーの追跡を停止します。

于 2012-10-19T20:25:40.600 に答える