私たちが起動した任意のアプリケーションのスクリーンショットを撮りたい C# (WPF) アプリケーションがあります (つまり、開始したプロセスへの参照があるため)。アプリケーションは最小化されているか、他のウィンドウの背後にある可能性がありますが、ピクセルの重なりではなく、個々のアプリケーションの画像のみが必要です。
BitBlt またはPrintWindowを使用した典型的な P/Invoke ソリューションがほとんどの場合機能することは知っていますが、グラフィック デバイスに直接描画する DirectX または OpenGL アプリケーションを処理する場合、それらは失敗します (黒/透明ピクセルしか得られません)。C# から Direct3D アプリのスクリーンショットを撮ることに関するこの記事を見つけたので、そのケースをカバーしたと思います。
だから私の質問はこれです:
- OpenGL アプリケーションでこれを行うにはどうすればよいですか?
- 使用する適切な方法 (PW/DX/GL) を決定する最も簡単な方法は何ですか?
- これを行うための単一の普遍的な方法はありますか?
#2 については、実行可能ファイルによってロードされたモジュールを検査し、DirectX または OpenGL DLL/アセンブリがロードされているかどうかを確認する必要がありますか?
これは Windows XP でのみ実行する必要があります (クロスプラットフォームではなく、このアプリケーションがすぐに Vista/7 に移行することはありません)。