0

WM_KEYDOWN と WM_INPUT (現在は WM_KEYDOWN のみ) をキャッチする WH_GETMESSAGE フックがあります。必要なのは、WM_KEYDOWN 間の時間間隔を測定して、ユーザーの入力速度を確認する方法です。入力が速すぎる場合は、正確にキーストローク全体を削除する必要があります (つまり、入力は実際にはユーザーからではなく、バーコードスキャナーなどの HID キーボードデバイスからのものです)。私がする必要があるのは、シンボルごとに30ミリ秒待つことです。その後、それ以上シンボルが適用されない場合は、それをウィンドウに送信する必要があります。そして、そのチェックは各 WM_KEYDOWN で実行する必要があります。新しいシンボルが適用された場合、メッセージ間で 30 ミリ秒の制限内に収まるその他のシンボルとともにキューにプッシュします (実際にコンピューターでテストしたところ、シンボルを入力するのに 31 ~ 32 ミリ秒かかり、バーコード スキャナーには 15 のような時間が必要です)。 -16 ミリ秒で十分です)。

私は次のアルゴリズムを考え出しました: 2. 次の着信メッセージが WM_KEYDOWN でないか、制限時間を超えている場合 - 保存されたメッセージを受信者に送信し、WM_KEYDOWN の場合は現在のメッセージを保存します - ステップ 1 に進みます。4. 次のメッセージが VK_RETURN であるか、シーケンスが 128 シンボルより長い場合 - 現在のシーケンスをドロップしてバーコードとして保存します。ステップ 1 に進みます。

このアルゴリズムの現在の欠陥は、sendMessage のことです。sendMessage と postMessage の両方を使用しましたが、どちらもフック プロシージャに再送信するだけです (これは明らかです)。このメッセージをウィンドウに直接送信する方法はありますか?

それとも、私の問題に対する他の解決策がありますか?

私の説明は曖昧に思えるかもしれませんので、私が達成する必要があることを書きます: 実際にウィンドウ プロシージャに到達する前にバーコード スキャナーの入力をインターセプトする必要があるため、スキャナーからの WM_KEYDOWN メッセージはターゲット ウィンドウに到達しません。バーコード メッセージは通常、単一の WM_KEYDOWN の間に 15 ~ 16 ミリ秒の間隔があり、VK_RETURN で終了します。

また、正確に WH_GETMESSAGE (または WM_INPUT と WM_KEYDOWN の両方をキャッチできる同様のフック) を使用する必要があります。WM_INPUT は、さまざまなデバイスからの入力を区別するために必要です (基本的に、すべての HID キーボードを列挙し、そのようなイベントが発生した場合にバーコードを送信するものを決定します。デバイスにバーコード スキャナーとしてフラグを立て、その VID&PID をローカル データベースに保存します。他のために)。

4

0 に答える 0