1

私は、キーボードとマウスのイベントを監視し、キーまたはマウス ボタンのプレスの事前設定された組み合わせが発生した場合に反応する C# アプリケーションに取り組んでいます。ホットキーの検出は、キーボードとマウスのフックを使用して既に機能しています。ただし、アプリケーションの応答が SendInput() を使用して新しいキー コンボを送信している場合、問題が発生します。

アプリが " Alt+RMB " m を待機し、それを抑制し、代わりに " Shift+A "を送信するとします。「 Alt+RMB 」を物理的に押し始めると、コンボが検出され、仮想の「Shift+A」が送信されます。

ただし、その偽のキープレスは元のキーと即座に混合されるため、アプリは「 Alt +RMB」ではない「Alt +Shift+A+RMB」の組み合わせを検出するようになり、「Shift+A」の送信が停止されます。仮想キープレスがシステムをクリアした後、実際のホットキープレスが再び検出され、サイクルが最初からやり直されます。(「 A 」を「 B」に置き換える必要があるセットアップでは、 「 B」を「A」に置き換えると無限ループが発生します。)

したがって、私の主な問題は、実際のキー/マウスイベントと仮想キー/マウスイベントを区別することです。助言がありますか?

(はい、タスクは実際にAutohotkeyが行うことと似ています。ただし、ホットキー検出とオプションの仮想入力送信ステップの間にカスタム ビジネス ロジックがあります。Autohotkey.dllを使用することはオプションかもしれませんが、そこで実行されているカスタム スクリプト インタープリター)。

4

1 に答える 1

0

結局のところ、仮想キー/マウス イベントの適切な用語は「注入」されており、低レベルのキーボード フックはKBDLLHOOKSTRUCTに関連するフラグを提供します。

ここで、フック関連のイベント管理を変更して、「LLKHF_INJECTED」フラグを持つイベントを抑制したり、メイン ロジックに通知したりせずに通過できるようにしました。

于 2012-05-16T18:04:12.540 に答える