Изменить параметр ColorPrevalence через WinAPI C#

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

При включении этого параметра, в реестре меняется значение у "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.


Ответы (0 шт):