質問

通常のゲームコントローラとしてDirectInputアプリケーションに表示される「GamePad」の作成方法はありますが、そのコントロールの状態は実際にソフトウェアによって定義されていますか?

役に立ちましたか?

解決

1つになるふりをするためのデバイスドライバを書き込みます。

具体的には、Windowsデバイスドライバは、割り込み要求プロトコルを介して呼び出し中の要求を処理します。これは、ドライバ内のラップアップ構造と内部にバッファのセットを繰り返します。

今すぐ知る必要があるのは、多くのドライバが実際に階層化されている、または積み重ねられている、または使用したい名前です。たとえば、ディスクドライバを作成するには、(ディスククラスとして)ドライバとインタフェースすることができますが、それ以外のドライバ(たとえばSCSIポート)を使用して、実際にデバイスにコマンドを送信します。

それが本物の機器の機能です。偽の装置は、最上位のインターフェース要件に準拠する必要があります。ディスク、またはコントローラ、またはマウス、またはそれが何であれ。しかし、彼らは彼らが好きなことをすることができます - 好きな値を返すことができます。

これにより、ユーザモードアプリケーションを介してドライバを制御し、デバイスを「BE」する可能性がある。ドライバメッセージを送信するには、DeviceIoControlを作成できます。それから実際にそれらのメッセージを取得することができます:

  • そのDeviceIoControlを構成するIRPにそれらを詰めます。
  • ドライバはあなたのプロセスのメモリスペースからそれらを読み込んでいます。

ドライバは、\\Registry\\Machineおよび他のさまざまな非ユーザー固有のエクスプローラレジストリエリアにアクセスすることもできますので、その方法を通信することが可能です。

最後に、新しいデバイスを介して全部化するのではなく、既存のIOをフィルタリングできないと言うことはありません。これを行うことができる素晴らしい選択肢や方法があります。

これを行うつもりなら、

  • VirtualKD または高価なデバッガケーブルと2台のPC。
  • あなたはおそらくこのブログPOST 。あなたはドライバーコードのために基本的に異なる名前があるので、それらのいくつかを解釈するでしょう:

    • wdm= Windowsドライバモデル、基本的には(一部の)Windows 9xを混在させたNTドライバモデル。
    • kmdf=カーネルモードドライバフレームワーク - 上記の型のドライバこのタイプのドライバを使用してください。さらにWDF(Windowsドライバ財団)を使用して、WDMの上にあるライブラリのセットです。
    • UMDF=ユーザーモードドライバフレームワーク - カーネルモードの危険性なしにドライバを書きます。できる場合は、これを使用するカーネルモードのドライバとして使用してください(ドライバのarlance、BugCheck)あなたのシステム。

編集私はDirectInputではかなり知識がない - DLLリダイレクトなどで使用されているさまざまなAPIコントロールを上書きする方法があるかもしれません。記載されている。

他のヒント

最も簡単な解決策は、XInputデバイス(Xbox 360と1)をエミュレートすることです。これらはほとんどのモダンなゲームでサポートされており、セットアップはとても簡単です。ここではここではC ++プロジェクトがあり、これをインストールされていないドライバや外部依存関係がない場合があります。 https://github.com/shauleiz/ vxboxInterface /

vjoy openSourceプロジェクトがあります。 http://sourceforge.net/projects/vjoystick / - 見る価値があります。

私はそれが古い質問であることを知っていますが、このトピックに興味がある人のためにそれはまた、 Vigem

Microsoft Xbox 360 Controller、Sony DualShock 4 Controller、Microsoft Xbox 1コントローラのようないくつかの有名なゲームパッドをエミュレートできます。プロジェクトはこれらの仮想コントローラと対話するためのいくつかのAPIを提供します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top