我正在尝试制作具有用户窗口主题颜色主题的应用程序(表单背景、文本颜色等..)
是否可以获得用户在 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)