2011-07-21 17 views
0

ウィンドウの表示内容をすべて取得したい。一方、そのウィンドウが実際に何も画面に表示されない場合、それは非常に良いでしょう。どうやって?このプロセスは描画関数を呼び出し、私の関数はフックして別の場所(例えばビットマップファイル)に描画し、実際に画面に描画せずに戻ります。ウィンドウの下にあるプロセスの描画関数全体をフックする方法はありますか?

Windows NTアーキテクチャでは、すべてのスレッドにシステムコールテーブルがあり、シングルスレッドのシステムコールテーブルを変更することができます。描画API(GDI?)を変更するだけで(アプリケーションがDirectXレンダリングを使用する場合、どうすれば生き残るのか分かりませんが、多分方法があります)、私はそれを行うことができると感じています。私はできますか?アプリケーションでDirectXレンダリングを使用している場合はどうすればよいですか?事前に

おかげで、

アリヴェリ

+0

あなたが書き込んだアプリケーションのウィンドウ、または「既存のアプリケーション」のウィンドウを参照していますか?最初のケースでは、必ずしもフックが必要なわけではありません。 2番目のケースでは、最小限に抑えることは難しい作業です。 – Damon

+0

2番目の場合 –

+1

その場合、最も不快で不快なことは、独自のgdi32ラッパーDLLを作成して元の関数と同じ関数をエクスポートし、オプションで関数を転送することです(GLInterceptのようなツールの仕組みに似ています) 。その後、あなた自身のDCで任意の描画コマンドを繰り返すことができます。あるいは、他のアプリケーションの中に独自のDCを作成するコードを挿入して、通常のものをこのコードに置き換えて、後でプロセスメモリを読み込むこともできますが、それは幸いです。システムコールテーブルを改ざん...再び、幸運。 – Damon

答えて

0

私は、唯一のCreateDCのような機能を引っ掛けてしまった、それは常にメモリデバイスコンテキストを作成し、他のすべての機能は、そのメモリDCに描画せました。

関連する問題