10

DWM を使用してウィンドウのコピーを自分の目的の場所にレンダリングする方法を見つけようとしています。DWM にどこかにレンダリングするように指示する唯一の方法は、サムネイル API を使用することです。

しかし、MSDN のDWM Thumbnail Overviewでは、具体的に警告しています。

DWM サムネイルでは、開発者は Windows Vista Flip3D (WINKEY-TAB) 機能のようなアプリケーションを作成できません。サムネイルは、2-D で目的のウィンドウに直接レンダリングされます。

サムネイル API を使用して Flip3D のようなアプリケーションを作成することはできないと言われていますが、どの API使用して Windows Flip3D のようなアプリケーションを作成できるかについては言及されていません。

では、Windows Vista Flip3D のようなアプリケーションを作成するには、どの APIを使用すればよいでしょうか?


バックグラウンド

Windows デスクトップ コンポジションを実行すると、アプリケーションはウィンドウ クライアント領域を独自のプライベート バッファーに描画します。(これは、すべてのアプリケーションが画面に直接描画していた以前のバージョンの Windows とは対照的です)。次に、このクライアント領域の画像がフレーム (タイトル バー、最小化、最大化、復元ボタンなど) に配置され、開いている他のすべてのウィンドウと共にデスクトップに描画 (合成) されます。

代替テキスト

このバッファーはプライベートであり、ここ数年でグラフィックス カードが 3D タスクの実行において強力になったため、Windows はいくつかの巧妙なトリックを実行し始めることができます。それらの 1 つは、クライアント ウィンドウを操作して、スケーリングとパースペクティブの変更を実行できるようにすることです。これにより、ライブの「サムネイル」API が可能になります。Windows は、指定したウィンドウのサムネイル サイズのコピーを描画します。これはすべてハードウェアで行われるため、非常に高速です。

もう 1 つの機能は、Flip3D (Win+Tab) です。コンポジターは、ウィンドウの 3D ポジショニングを実行できます。繰り返しますが、これはすべてハードウェアで行われるため、非常に高速です。

デスクトップ ウィンドウ モニターにアプリケーションのサムネイルを「ここ」に描画するように指示する API を見つけました。

//Register a thumbnail we want
DwmRegisterThumbnail({in}hwndDestination, {in}hwndSource, out thumbnail);

// Start displaying the thumbnail
DwmUpdateThumbnailProperties({in}thumbnail, {in}thumbproperties);

しかし、DWM にウィンドウのフルサイズ バージョンを描画するよう指示する API が見つかりません。


編集: Windows でのコピー防止について Microsoft を非難することはできません:アーカイブ

  • 出荷されたライセンス製品は、コンプライアンス規則に準拠するものとし、HDCP 仕様およびコンプライアンス規則のコンテンツ保護要件を無効にするためにかかるライセンス製品を変更しようとする試みを効果的に阻止するように明確に設計された方法で設計および製造されるものとし ます。

  • ライセンス製品は、デバイス キーまたはその他の極秘情報を発見または開示しようとする試みを効果的に阻止することを明確に意図した方法で設計および製造されるものとします。

  • ライセンス製品は、HDCP 仕様およびコンプライアンス ルールのコンテンツ保護要件を無効にしようとする試みを効果的に阻止するように明確に設計された方法で、少なくとも次の手法を使用するものとします。

あなたはソニーを責めなければなりません。

4

1 に答える 1