問題タブ [dwm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4706 参照

c# - C#でウィンドウのサムネイルを取得するには?

Windows 7 のスーパーバー プレビューや Aero フリップなど、ウィンドウのサムネイルを取得するにはどうすればよいでしょうか? アプリケーションのスクリーンショットは必要ありません。DWM にはこの情報を取得する方法があります。

これを行うC#の方法が欲しいです。

ありがとう

0 投票する
1 に答える
3457 参照

colors - WindowsはAeroGlassの色をどのように変更しますか?

私はWindows7RTMを使用していますが、DWM(uxsms)を再起動せずに、コントロールパネルでAeroGlassの色をスムーズに更新できるのではないかと思います。DwmSetColorizationColorはもう機能していません...

0 投票する
1 に答える
1114 参照

gdi - DWM コンポジションの切り替えにより、クライアント領域のアルファが失われる

ここに単純な Windows アプリケーションがあります。

http://www.bengoodger.com/software/chrome/dwm/app.cc

私のアプリは、DWM 合成がアクティブなときはカスタマイズされたグラス フレームを提供し、非アクティブまたは利用できないときは完全なカスタム フレームを提供します。

「カスタマイズされたガラス フレーム」は拡大されたタイトル バー領域で構成されています。これは_、透明なコントロールをレンダリングしたいので、クライアント領域の一部である WM NCCALCSIZE の実装によって報告されます。ウィンドウのこの「高いタイトル バー領域」の部分が透明になるように、透明な黒 (上記の単純な例では BLACK_BRUSH) で塗りつぶし、DWM によってガラスとして描画されます。

たとえば、外観設定コントロール パネルを使用して Vista Basic または Windows Standard に切り替えたり、システムで DWM を無効にする必要があるアプリを起動したりして、システムの DWM を切り替えると、アプリは WM_NCPAINT などを処理して完全なカスタム レンダリング モードに切り替わります。 . 元に戻すと、逆のことが予想されますが、これはほとんどの場合発生しますが、「背の高いタイトル バー領域」が真っ黒になります。

ウィンドウの配置を取得し、ウィンドウを非表示にしてから、WM_DWMCOMPOSITIONCHANGED 処理でウィンドウの配置を再度設定することで、この問題を回避できることがわかりましたが、これにより他の恐ろしいバグが発生します (ウィンドウの z オーダーの変更が最も少ない)。

私の質問は - ここで何が間違っているのですか? どういうわけかウィンドウが偽の状態になっているようで、非表示/表示すると修正されます。どうすればこれを防ぐことができますか? ガイダンスをいただければ幸いです。

注:これをいくらか絞り込みました。DWM グラスが有効な場合、クライアント領域の上にレンダリングされる黒く塗られたクライアント領域の部分は、透明にレンダリングされます。Glass 以外から Glass に戻ると、クライアント領域が透明ではなく、真っ黒にレンダリングされることに気付きました。ただし、ウィンドウを最大化して復元すると、ウィンドウは透明に戻ります。その後、ウィンドウのサイズを小さくドラッグしても、上部のウィンドウは透明のままです。大きくドラッグすると、ウィンドウの上部が再び黒くなります。DWM がウィンドウの背後にあるピクセルをキャッシュしており、ウィンドウのサイズを大きくすると、キャッシュが十分に大きくないため、そこに何も描画できなくなるかのようです。この状態をリセットする DWM 関数が見つからないようです。

0 投票する
1 に答える
1855 参照

windows-7 - デスクトップウィンドウマネージャーは画面全体をキャプチャします

Windows Vista / 7で画面全体をキャプチャする方法の出発点を誰かに教えてもらえませんか?以前のバージョンのWindowsでそれを行う方法は知っていますが、GDI / BltBit呼び出しに頼ることなく、すべてをD3Dスタックに保持したいと考えています。

DWM APIを使用してHWNDを使用している場合、特定のウィンドウのライブサムネイルを取得できることはわかっていますが、デスクトップ全体の「サムネイル」を取得するにはどうすればよいでしょうか。

ありがとう、

アレックス

0 投票する
2 に答える
10851 参照

c# - C#、WPF、および DWM を使用してウィンドウのスクリーンショットを保存する

これは、この質問のフォローアップの質問です

上記の解決策では、DWM を使用してアクティブなウィンドウのサムネイルを表示します。私の理解が正しければ、表示するアプリケーションのウィンドウ ハンドルを指定してから、ウィンドウ ハンドルと、ウィンドウがターゲット ウィンドウのコンテンツを描画するウィンドウ上の場所を指定することで機能します。

ウィンドウのどこかに直接描画する代わりに、ウィンドウのスクリーンショットを BitmapImage または Image に直接レンダリングする方法はありますか? (基本的には、ウィンドウのスクリーン ショットを取得するだけです。別のウィンドウで覆われていても、更新サムネイルを使用しません。)

助けてくれてありがとう!

0 投票する
3 に答える
3017 参照

windows - Windows Aero:「ガラス」を表示するためにペイントする色は何ですか?

ガラスを表示するには、クライアント領域にどの色を塗る必要がありますか?

以下を使用して、フォームのフレームをクライアント領域に拡張しました。

DWMがガラスに置き換えるために探すアルファに関するMicrosoftの公式ドキュメントが見つかりません。DwmExtendFrameInClientAreaのドキュメントには、カスタムカラーが必要であるとさえ記載されていません。特別な色さえ必要であるという伝聞と神話だけがあります。

私が見つけることができる最も近いものは、MSDNのトピックです:

DWMを使用したカスタムウィンドウフレーム

拡張フレームを表示するには、拡張フレームの各辺の下にある領域に、アルファ値が0のピクセルデータが含まれている必要があります。

更新:そしてブログ投稿:

開発者向けWindowsVista–パート3 –デスクトップウィンドウマネージャー

たまたま、RGB黒(0x00000000)のビットパターンは100%透明ARGBのビットパターンと同じであるため、実際に「黒」のGDIブラシで描画でき、DWMにペイントされた領域をぼかすように指示したと仮定します。結果は、望ましいガラス効果になります。

彼らが文字通り言っていること(アルファ値がゼロのピクセルデータ)をとると、アルファがゼロの色を作成し、それを拡張領域にペイントします。

ただし、ガラス効果は表示されません。

代替テキスト


引用されたMSDNトピックを無視し、代わりに(完全に透明な黒ではなく)完全に不透明な黒を使用する場合:

ガラス効果が表示されます:

代替テキスト

次に、不透明な黒がDWMがガラスに置き換えるために探すピクセル値であると信じるようになります。

しかし、どうすればガラス領域に黒いアイテムをペイントできますか?


ガラス領域に黒い長方形をペイントし、その横に円を描くことをテストしました。奇妙なことに、長方形は表示されませんが、円は表示されます。両方とも同じ色です:

代替テキスト

では、世界で何が起こっているのでしょうか?ガラスを表示するために拡張フレーム領域にペイントする適切な色は何ですか?


アップデート2

Adisakの提案を使用して、Aeroの愚かさがどこにあるかを正確に特定します。ここでは、黒い円の内側に黒い長方形を描きます。

代替テキスト

FillEllipseは黒丸の描画をサポートしていませんか?


アップデート3

Pondidumは、 Graphics.Clear透明な黒色で呼び出すと、ガラスが見えるようになるかどうか疑問に思いました。

それ機能しますが、それでもガラスに不透明な黒いアイテムを描くことはできません。

代替テキスト


アップデート4

MicrosoftのVistaBridgeLibrary (.NETに追加されないVista機能のマネージラッパー)を見ると、WinFormsではなくWPFフォームで拡張ガラスフレームを機能させることができます。

も参照してください

0 投票する
1 に答える
2666 参照

directx - DirectX IDXGIOutput::GetDisplaySurfaceData を使用した DWM スクリーン キャプチャ

DXGI とGetDisplaySurfaceData()Direct3D 10/11 を使用して、DWM の DirectX サーフェスをキャプチャしようとしています。

IDXGIOutput::TakeOwnership()ただし、を呼び出す前にアダプターの出力の所有権を取得するGetDisplaySurfaceData()と、画面全体が一瞬ブラックアウトしてから元に戻ります (表示モードの切り替え時と同様)。

なぜこれが起こるのですか?どうすればこれを防ぐことができますか?

0 投票する
1 に答える
1760 参照

windows - DwmRegisterThumbnail が失敗するのはなぜですか?

子ウィンドウの画面をキャプチャして、Windows 7 の親サーフェスにレンダリングしようとしています。

これは常に失敗します。visualHwnd は子ウィンドウで、hWnd は親です。また、親子関係なしで試してみましたが、何も描画されません。if ステートメントが失敗するため、当然のことです。

その理由は何ですか?

親を作成する方法は次のとおりです。

そして子供:

0 投票する
2 に答える
4978 参照

winapi - Windows 7 DWM サムネイルを含むウィンドウをキャプチャすることはできますか?

Windows API では何もできないと思い始めています。

私は2つの窓を持っています。1 つには DWM サムネイルが含まれています。私がやりたいのは、ウィンドウの画面をサムネイル付きで別のウィンドウにキャプチャできるようにしたいということです。bitblt を使用してこれを行うと、サムネイルを除くすべてがコピーされます。ビットマップに存在しないだけです。

では、DWM レンダリングはどのように機能するのでしょうか。つまり、DWM がサムネイルを登録済みウィンドウの DC に直接レンダリングする場合、私のアプローチは機能するはずです。よくわかりません。

本当にありがとう。

0 投票する
3 に答える
7020 参照

c# - Aero グラスなしの DwmExtendFrameIntoClientArea

Aero Glass を有効にして API 呼び出しを使用すると、DwmExtendFrameIntoClientArea問題なく動作します。ただし、Windows コントロール パネルでの動作と同様に、Aero Glass が無効になっている場合にも動作するようにしたいと考えています。

ここに画像の説明を入力

Aero グラスが無効になっているにもかかわらず、フレームがクライアント領域に拡張されていることに注意してください。アプリケーションで API 呼び出しを行うDwmExtendFrameIntoClientAreaと、返された HRESULT は間違いなく成功せず、アプリケーションは次のようになります。

http://img197.imageshack.us/img197/9629/clientapplication.png

通常、Aero Glass を有効にすると、境界線はコントロール パネルのようにナビゲーション ボタンの下まで伸びます。どうすればいいですか?DwmExtendFrameIntoClientArea明らかに機能していません。

ところで、関係があれば、私のアプリケーションは WPF アプリケーションです。