web-dev-qa-db-ja.com

DirectXゲームをフック/オーバーレイしますか?

誰かがC#でDirectXゲームをフック/オーバーレイする方法を教えてもらえますか?

フルスクリーンのC#ウィンドウをゲームとオーバーラップさせようとしましたが、うまくいきません。少し調べてみると、ゲームをフックしてからC#ウィンドウを表示する必要があることがわかりました。

誰かが私がこれをどのように行うかを説明できますか? DirectXゲームでC#フォームを表示できますか?

13
Joey Morani

(開示:私はこの会社で働いています)

Deviare API を試すことができます。これには、C#からCOMオブジェクトをフックする機能があります。これは、任意のプログラミング言語(COMをサポート)から使用できるCOMオブジェクトのセットです。ビデオをキャプチャしてオーバーレイを追加する方法を示すソースコードの記事が利用可能です: ビデオをキャプチャしてFPSを計算するためのDirect3Dアプリケーションの計測

COM Spy Console および Direct Sound Capture は、DirectXなどのCOMオブジェクトをフックするコンソールを実装する2つの例です。

それが役に立てば幸い。

5
sw.

C#を使用してDirect3D 9 APIをフックする私の例 を試すことができます。これは、マネージコードからアンマネージ関数にフックをインストールできるオープンソースの.NETアセンブリを利用しています。

SlimDXも使用されます-これはDirect3Dライブラリのオープンソースマネージドラッパーです。

フックのトリッキーな部分は、COMオブジェクトの仮想関数のアドレスを決定することです。これは、上記の例で、VTableからアドレスを見つける小さなC++ヘルパーDLLを使用して行われます。[更新:VTableから関数ポインターを取得する方法を示すコメントが投稿されています。 C#も-comオブジェクトにIntPtrを指定]

この例では、IDirect3DDevice9のEndSceneメソッドをフックします。これは、オーバーレイを描画する場所でもあります。オーバーレイにフォームを表示することに関しては、それがそれほど簡単かどうかはわかりません-画像を簡単にレンダリングできることを意味しますが、入力をキャプチャし、フォームへのイベントを手動で応答/パススルーする必要があります適切に質問します。幸運を!

16
Justin Stenning

C#から直接DirectXにアクセスできないため、これは注意が必要な場合があります。

概念の私の限られた理解から:

DirectXフックは、DirectXコンテキストに接続して操作することで構成されます。これには、C/C++に最適な別のプログラムのメモリをいじる必要がある場合とない場合があります。

私は間違っているかもしれませんが、これは高度なトピックであり、私の腸はあなたが.NETの下で問題を抱えているかもしれないと私に言います

2
Aren