条件付きで入力をブロックするWindowsアプリケーションをどのように作成しますか?

StackOverflow https://stackoverflow.com/questions/1619784

  •  06-07-2019
  •  | 
  •  

質問

PawSense を聞いたことがあるかもしれません。これは、キーストロークの入力を防ぐWindows専用ユーティリティです「zlxkkkkkkkk;」のような無意味な入力をキーボードに入力した猫または他の動物がいると考えられる場合。暇なときにやるのは楽しいプロジェクトのように思えますが、実装の詳細については疑問に思っていました。

ハードコーディングされたヒューリスティックまたは何らかのパターン認識アルゴリズムを使用して、パターン認識の一部を実行できると思います(これまでに経験したことがあり、安心しています)。私の質問は、システムプログラミングの側面と、入力をブロックする方法のロジックについてです。

猫のタイピングを検出した場合、アプリケーションで入力を監視し、チャレンジを提示する必要があります。最近のキーストロークのバッファを保持し、それが猫以外の入力である場合にのみ許可しますか?または、猫のタイピングが発生している場合、入力をブロックする前に小さな数字だけを通しますか?使用する実際のロジックは何ですか?

たとえばC#での入力をブロックする実際のメカニズムについては、このサイトに関する他の質問があります。繰り返しますが、私の質問は、猫のタイピングを検出してブロックするためにどのロジックを使用するかです。

役に立ちましたか?

解決

バッファに問題がある可能性があるため、キーボードに猫がいると思うまで待ってから入力をブロックします。

たとえば、入力中にウィンドウをすばやく切り替えて入力している場合、キーストロークの位置をどのように決定しますか?

必要なだけシンプルにしてください。

他のヒント

WIN32システム全体のフックの導入を検討する必要があります。この MSDNの記事は、この基本をカバーしています(両方のアプリケーションを指定することに注意してください)またはスレッドレベルのフックとシステム全体のフック)。

それを理解したら、いくつかのキーボード関連のメッセージをキャッチする必要があります。WM_KEYUPは確かに、必要に応じて他のいくつかのWM_KEYxxxxメッセージも同様です。)

次に、キーストロークが有効であるか意味のないものであるかを判断するロジックを導入し、メッセージを渡す(最終的にフォーカスのあるアプリケーションにトリクルダウンできる)か、無視する必要があります。

これについて何も知らずに、動物が実際にどのキーを押したかではなく、キーがどれだけ長く押されたかに基づいて開始します。など。ただし、キーのセットで一時停止する可能性が高くなります。

だから、単にキーを押す時間を計ることができれば、それはうまくいくと思う。

負荷を考える。私は次のようなものから始めます:

  1. 2分間などのユーザーアクティビティがないことを待ちます。
  2. アプリを起動
  3. キーボードヒットを聞く
  4. 入力されたキーがディクショナリに存在する場合、一致します
  5. 6または7後にキーパッドをブロックします。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top