はありません。これは設計によるものです。この設定は、ユーザによって変更されることを意図しており、アプリケーションによって変更されることはありません。また、ユーザーがこれを行うために使用する組み込みのアプレットがあります:パーソナライズコントロールパネル。
しかし、あなたはヒントを得たコードのように、 APIの文書化されていないものがあります。DwmSetColorizationParameters
です。ターゲットとするすべてのオペレーティングシステムでコードが動作することを慎重にテストするだけで、新しいバージョンのWindowsおよび/または現在のバージョンのWindowsへの更新によって中断する可能性があることに注意してください。
Windows 7で動作していたのは知っていますが、すべての最新のサービスパックやその他のアップデートでテストしていませんし、Windows 8でも動作するかどうかはわかりません。あなたはテストする。文書化されていないAPIを使用することは多くの作業です。
あなたは幸運です。 Someone elseはすでにリバースエンジニアリングを行っています。 (。。あなたがあなたの質問に表示コードを書いた人それはいいだろうが、彼らに信用を与えることのように、おそらく、あまりにも、多分それはthis guy他の人でした?)
ここ
は、あなたがそれを使用する方法は次のとおりです。
using System;
using System.Drawing;
using System.Globalization;
using System.Runtime.InteropServices;
class DwmManager
{
private struct DWM_COLORIZATION_PARAMS
{
public uint clrColor;
public uint clrAfterGlow;
public uint nIntensity;
public uint clrAfterGlowBalance;
public uint clrBlurBalance;
public uint clrGlassReflectionIntensity;
public bool fOpaque;
}
[DllImport("dwmapi.dll", EntryPoint = "#127", PreserveSig = false)]
private static extern void DwmGetColorizationParameters(out DWM_COLORIZATION_PARAMS parameters);
[DllImport("dwmapi.dll", EntryPoint = "#131", PreserveSig = false)]
private static extern void DwmSetColorizationParameters(ref DWM_COLORIZATION_PARAMS parameters,
bool unknown);
// Helper method to convert from a Win32 BGRA-format color to a .NET color.
private static Color BgraToColor(uint color)
{
return Color.FromArgb(Int32.Parse(color.ToString("X"), NumberStyles.HexNumber));
}
// Helper method to convert from a .NET color to a Win32 BGRA-format color.
private static uint ColorToBgra(Color color)
{
return (uint)(color.B | (color.G << 8) | (color.R << 16) | (color.A << 24));
}
// Gets or sets the current color used for DWM glass, based on the user's color scheme.
public static Color ColorizationColor
{
get
{
// Call the DwmGetColorizationParameters function to fill in our structure.
DWM_COLORIZATION_PARAMS parameters;
DwmGetColorizationParameters(out parameters);
// Convert the colorization color to a .NET color and return it.
return BgraToColor(parameters.clrColor);
}
set
{
// Retrieve the current colorization parameters, just like we did above.
DWM_COLORIZATION_PARAMS parameters;
DwmGetColorizationParameters(out parameters);
// Then modify the colorization color.
// Note that the other parameters are left untouched, so they will stay the same.
// You can also modify these; that is left as an exercise.
parameters.clrColor = ColorToBgra(value);
// Call the DwmSetColorizationParameters to make the change take effect.
DwmSetColorizationParameters(ref parameters, false);
}
}
}
プロジェクトにそのクラスが追加されたら、ColorizationColor
プロパティでそのクラスとやり取りします。コメントのように、DWM_COLORIZATION_PARAMS
構造はロットより多くの情報を提供します。必要に応じて、これらの追加パラメータを取得/設定するプロパティを追加できます。彼らが何をするかを正確に把握するために、いくつかの実験が必要になります。
これらの機能を実行する前に、DWMコンポジションがホストオペレーティングシステムでサポートされ、有効になっていることを確認する必要があります。 (そうでなければ、PreserveSig
属性によって例外がスローされます)これはかなり明白ですが、とにかく言及する価値があります。私はそれ故に何のC++経験タグのC#を持っていないとしてそれは、私のような誰かに正確に役立つ良いチュートリアルですが、ない
[DllImport("dwmapi.dll")]
private static extern int DwmIsCompositionEnabled(ref bool pfEnabled);
うわー。ありがとう。私はこれを後でチェックして、病気に戻ってきます。本当にありがとう。 – Trontor
完璧に動作します!構造体が次の形式で使用されていることはわかりませんでした。DWM_COLORIZATION_PARAMS dwm = new DWM_COLORIZATION_PARAMS(); – Trontor
@Trontor確かに。 C#では、それがクラスであれ構造体であれ、同じ方法で新しいオブジェクトを作成します。すべての構造体メンバはデフォルト値に初期化されます。これは、 'uint'のような数値型は' 0'です。しかし、あなたは 'DwmGetColorizationParameters'関数にそのリファレンスを渡そうとしているので、そのメンバーを埋めるようにしています。それは本当に重要ではありません。 :-) –