現在、スクリーン キャプチャ プログラムを作成しようとしています。先週、GetFrontBufferData メソッドを試しましたが、成功しました。ただし、そのパフォーマンスはひどいもので、デスクトップ イメージしかキャッチできません。これは、フル スクリーン ゲームの実行を開始すると、GetFrontBufferData メソッドが何も取得しないことを意味します。しかし、私が望むのは、デスクトップの画像ではなく、フルスクリーンのゲームをキャッチすることです。
GetFrontBufferData ソリューションでは、デバイスを作成し、HWND パラメーターを NULL にしました。トップレベル ウィンドウのハンドル (つまり、フル スクリーン ゲームのハンドル) を取得して CreateDevice メソッドに渡すと、そのスクリーン ショットを取得できます。
実際、私はDX9に基づいたスクリーンキャプチャ方法をいくつか試しました。画面キャプチャの最速の方法に関する質問を調べ、GetRenderTarget() メソッドと GetRenderTargetData() を組み合わせて試しました。問題は、プログラム自体によってレンダリングされた Render データしか取得できないことです。GetBackBuffer() についても同様です。
トップレベル ウィンドウのハンドルを取得できれば、特定のウィンドウ イメージ (実行中のフル スクリーン ゲームなど) を取得できますか? Win32 - Get Main Wnd Handle of applicationに記載されている EnumWindow メソッドを確認しました。私のテストによると、このコードはプログラム自体によってのみ作成されたウィンドウを取得するようです。ただし、他のプログラムでいくつかのウィンドウを作成する必要があります。
それが私の質問です。一言で言えば、私は 2 つのことを知りたいです。2、それが正しい場合、ハンドルを取得する方法; それが間違っている場合、フルスクリーンのゲームをキャプチャする正しい方法は何ですか?