DirectInput アプリケーションには通常のゲーム コントローラとして表示されるが、そのコントロールの状態は実際にはソフトウェアによって定義される「ゲームパッド」を作成するにはどうすればよいでしょうか?
5 に答える
1つのふりをするデバイスドライバーを作成します。
具体的には、Windowsデバイスドライバーは、割り込み要求プロトコルを介していわゆる割り込み要求を処理します。これは、ドライバーの内部でラップアップされた構造と一連のバッファーに要約されます。
次に知っておく必要があるのは、多くのドライバーが実際にはレイヤー化されているか、スタックされているか、または使用したい名前であるということです。したがって、たとえばディスクドライバーを作成するには、その上のドライバー(ディスククラスとして)とインターフェイスしますが、その下のドライバー(たとえば、scsiポート)を使用して、実際にデバイスにコマンドを送信します。
これが実際のデバイスの仕組みです。偽のデバイスは、ディスク、コントローラー、マウスなど、最上位のインターフェイス要件に準拠する必要があります。ただし、その下では、好きなことを行うことができます。好きな値を返します。
これにより、ユーザーモードアプリケーションを介してドライバーを制御し、デバイスに「なりすます」ふりをする可能性が広がります。ドライバーメッセージを送信するには、それに送信できますDeviceIoControl
。次に、これらのメッセージを実際に取得するには、次のいずれかを実行できます。
- そのDeviceIoControlを構成するIrpにそれらを詰め込みます。
- ドライバーにプロセスのメモリスペースからそれらを読み取らせます。
\\Registry\\Machine
ドライバーは、その他のさまざまなユーザー固有ではない非エクスプローラーのレジストリ領域にもアクセスできるため、その方法で通信することができます。
最後に、新しいデバイスを介してすべてを構成するのではなく、既存のIOをフィルタリングできないことは言うまでもありません。これを行うには、非常に多くのオプションと方法があります。
これを行う場合は、次のものが必要です。
- VirtualKDまたは高価なデバッガケーブルと2台のPC。
また、このブログ投稿の参照から始めたいと思うかもしれません。ドライバーコードには基本的に何億もの異なる名前があることがわかるので、それらのいくつかを解釈します。
- WDM = Windows Driver Model、基本的にはWindows 9x(の一部)と混合されたNTドライバーモデル。
- KMDF =カーネルモードドライバーフレームワーク-上記のタイプのドライバーはこれを使用し、さらにWDM上にあるライブラリのセットであるWDF(Windows Driver Foundation)を使用して、より速く使用できるようにします。
- UMDF=ユーザーモードドライバーフレームワーク-カーネルモードの危険なしにドライバーを記述します。可能であれば、これを使用してください。カーネルモードのドライバーがうまくいかないと、システムがブルースクリーンになります(ドライバーの用語ではバグチェック)。
編集:私はDirectInputについてあまり知識がありません-DLLリダイレクトなどを介して使用中のさまざまなAPIコントロールをオーバーライドする方法があるかもしれません。これは、私が説明した方法よりも簡単かもしれません。
vJoy オープンソース プロジェクトがあります: http://sourceforge.net/projects/vjoystick/ - 一見の価値があります。