C#:获取 Windows 8.1/10 选定的颜色主题?

Ale*_*225 1 c#

我正在尝试制作具有用户窗口主题颜色主题的应用程序(表单背景、文本颜色等..)

是否可以获得用户在 Win 8.1/10 中选择的#color?

我说的是这个具体的设置:

在此输入图像描述

小智 5

这是我创建的一个示例,也是基于Hans Passant 上面发布的链接。另一种类似的方法可以在 GitHub 上找到,参见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;
    }
}
Run Code Online (Sandbox Code Playgroud)