状況: インターネット経由で画面共有を実行するソフトウェアを使用しています。この場合、1 人のユーザーがプレゼンターとして機能し、他のユーザーが視聴者/出席者として機能します。
プレゼンテーション ウィンドウの他に、プレゼンターには、画面に表示される非共有ウィンドウのセット (共有の開始/共有の停止などのボタン バー、Skype ウィンドウなど) もあります。
プレゼンターは、画面共有ソフトウェアのセットアップから、これらの非共有ウィンドウを非表示にするように構成できます (つまり、出席者に送信される画面共有には表示されませんが、その背後にあるウィンドウ コンテンツはスクリーンショットに表示されます)。 )。
スクリーンショットは、毎秒約 10 フレームまたはそれ以上の速度で送信されます。
質問: これらの NON-SHARING-WINDOWS ウィンドウを除いて、プログラムで画面をキャプチャするにはどうすればよいですか?
注:
- 1 秒あたりのフレーム数が高いため、ウィンドウがちらつくため、これらのウィンドウのアルファを最小化/最大化/設定することはできません。アプリケーションは Win32 C++ で書かれています。
- レイヤード ウィンドウを使用しますが、Windows 7 のデスクトップ コンポジション機能のため、そのままでは使用できません (Windows 8 では、DwmEnableComposition を使用して一時的かつプログラム的にコンポジションを無効にすることはできなくなりました)。
- Windows XP/2000/7 などにはレイヤード ウィンドウ アプローチを使用し、Windows 8 (存在する場合) には別のアプローチを使用できますが、すべてのシステムで動作する単一のプロセスを好みます。
- 個々の画像 (デスクトップ、キャプチャする必要があるウィンドウ) をキャプチャし、z-index を使用して最終的な画像を作成することで、スクリーンショットを「作成」することもできますが、必要なフレーム/秒の値のためです。 、このプロセスは遅すぎます。