Изменить параметр ColorPrevalence через WinAPI C#
И так, начну с начала. В настройках персонализации Windows есть параметр "Show accent color on title bars and windows borders".

При включении этого параметра, в реестре меняется значение у "ColorPrevalence" с 0 на 1.

Некоторые из этих параметров, такие как ColorizationColor, ColorizationBlurBalance, ColorizationAfterglow (и т.д.) можно изменить с помощью не задокументированного WinAPI и DwmSetColorizationParameters()
Вот небольшой пример который получает параметр ColorizationColor:
private struct DWM_COLORIZATION_PARAMS
{
public uint clrColor; //ColorizationColor
public uint clrAfterGlow; //ColorizationAfterglow
public uint nIntensity; //ColorizationColorBalance -> 0-100
public uint clrAfterGlowBalance; //ColorizationAfterglowBalance
public uint clrBlurBalance; //ColorizationBlurBalance
public uint clrGlassReflectionIntensity; //ColorizationGlassReflectionIntensity
public uint clrGlassAttribute; //ColorizationGlassAttribute
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);
private static System.Drawing.Color BgraToColor(uint color)
{
return System.Drawing.Color.FromArgb(Int32.Parse(color.ToString("X"), NumberStyles.HexNumber));
}
private static uint ColorToBgra(System.Drawing.Color color)
{
return (uint)(color.B | (color.G << 8) | (color.R << 16) | (color.A << 24));
}
public static System.Drawing.Color ColorizationColor
{
get
{
DWM_COLORIZATION_PARAMS parameters;
DwmGetColorizationParameters(out parameters);
return BgraToColor(parameters.clrColor);
}
set
{
DWM_COLORIZATION_PARAMS parameters;
DwmGetColorizationParameters(out parameters);
parameters.clrColor = ColorToBgra(value);
DwmSetColorizationParameters(ref parameters, false);
}
}
Так вот, вопрос состоит в том как с помощью WinAPI и DwmSetColorizationParameters() изменить параметр ColorPrevalence.