C #: get selected Windows 8.1 / 10 color theme?

I am trying to make an application with a color theme for windows users theme (Background form, text color, etc.)

Is it possible to get the #color that the user selected in Win 8.1 / 10?

I am talking about this particular setting:

enter image description here

0
source share
1 answer

This is an example that I created, also based on the link that Hans Passant posted above. Another similar approach can be found on GitHub, see AccentColorService

public class ThemeInfo
{
    [DllImport("uxtheme.dll", EntryPoint = "#95")]
    public static extern uint GetImmersiveColorFromColorSetEx(uint dwImmersiveColorSet, uint dwImmersiveColorType, bool bIgnoreHighContrast, uint dwHighContrastCacheMode);
    [DllImport("uxtheme.dll", EntryPoint = "#96")]
    public static extern uint GetImmersiveColorTypeFromName(IntPtr pName);
    [DllImport("uxtheme.dll", EntryPoint = "#98")]
    public static extern int GetImmersiveUserColorSetPreference(bool bForceCheckRegistry, bool bSkipCheckOnFail);

    public Color GetThemeColor()
    {
        var colorSetEx = GetImmersiveColorFromColorSetEx(
            (uint)GetImmersiveUserColorSetPreference(false, false),
            GetImmersiveColorTypeFromName(Marshal.StringToHGlobalUni("ImmersiveStartSelectionBackground")),
            false, 0);

        var colour = Color.FromArgb((byte)((0xFF000000 & colorSetEx) >> 24), (byte)(0x000000FF & colorSetEx),
            (byte)((0x0000FF00 & colorSetEx) >> 8), (byte)((0x00FF0000 & colorSetEx) >> 16));

        return colour;
    }
}
0
source

Source: https://habr.com/ru/post/1654920/


All Articles