9

システム全体でいくつかのマウス クリックをフィルタリングする必要があるアプリケーションを構築しています。つまり、特別な場合にシステムがマウス ボタンのクリックを無視するようにする必要があります。

低レベルのマウスフックを使用SetWindowsHookExして、これらのクリックを除外します。アプリケーションを除いて、比較的うまく機能しWPFます。DirectXこれは、これらのアプリケーションが入力処理にとを使用しているからだと思いDirectInputます。これらのアプリケーションでは、ドライバから直接入力を取得するため、クリックを除外できません。

WPF/DirectXアプリケーションでクリックをフィルタリングする方法はありますか?

クリックをグローバルにフィルタリングすることは一般的には良い考えではありませんが、私のアプリケーションにとっては重要であり、ゲームや他のプログラムでフィルタリングされないようにします. ただし、WPFアプリケーションには通常GUIの があるため、それらのクリックもフィルタリングする必要があります。

アップデート

この問題は、フィルタリング ドライバを自作することで解決できると思いますが、ドライバを書いた経験がないので、他に解決策があれば教えてください。

API フック リソース

API フックに関する役立つリンクをいくつか見つけました。これを参考にしてください。

Windows APIの
フックAPI フックの解明
API フックの解明 パート 2
メモ帳からの Textout 呼び出しのハイジャック
madCodeHook
IAT 関数のフック

最終的解決

WPF は DirectInput を使用しませんが、入力処理に標準の Win32 メッセージを使用します (開発にスタイラスを使用し、WPF アプリがスタイラス対応であることを知らなかったので、すべての問題の原因であるスタイラスを除きます)。ただし、DirectInput を使用するアプリでクリックをフィルタリングするには、受け入れられた回答で説明されているように、API をフックする必要があります。

4

1 に答える 1

6

APIフックと呼ばれる方法を使用できます-ライブラリ関数への特定の呼び出しをオーバーライドし、独自の動作を与えます。このタスクを単純化するフック ライブラリが数多くあります。最もよく使用されるライブラリは次のとおりです。
* Microsoft Detours
* MadCodeHook
* Deviare API Hook
* API Hijack

Direct3D をフックするウィキペディアの例も参照してください。

システム内の各プロセスにフック ライブラリを挿入するだけで済みますが、質問から判断すると、既にそれを達成していると思います。

于 2010-08-22T16:57:36.553 に答える