gpt4 book ai didi

c# - 托盘图标的 Windows 10 任务栏颜色检测

转载 作者:可可西里 更新时间:2023-11-01 10:10:52 24 4
gpt4 key购买 nike

有什么方法可以检测 Windows 10 正在运行哪种颜色和哪种类型的 Windows 样式(我猜是最新的具有浅色/深色主题 - 1903)

我有一个托盘图标应用程序,我想根据主题显示一个黑色/白色图标。内置应用程序正确显示它们,但我不知道如何检测它。

最佳答案

您可以从注册表中获取当前主题信息:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes

(GetCurrentThemeName API 在我的 Windows 10 操作系统上返回 InstallVisualStyle 值)

声明:

[DllImport("UxTheme.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetCurrentThemeName(StringBuilder pszThemeFileName, int cchMaxNameChars, StringBuilder pszColorBuff, int cchMaxColorChars, StringBuilder pszSizeBuff, int cchMaxSizeChars);

要获取当前的主题颜色(强调色),你可以这样做:

[DllImport("Uxtheme.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "#95")]
public static extern int GetImmersiveColorFromColorSetEx(int dwImmersiveColorSet, int dwImmersiveColorType, bool bIgnoreHighContrast, int dwHighContrastCacheMode);

[DllImport("Uxtheme.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "#96")]
public static extern int GetImmersiveColorTypeFromName(IntPtr pName);

[DllImport("Uxtheme.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "#98")]
public static extern int GetImmersiveUserColorSetPreference(bool bForceCheckRegistry, bool bSkipCheckOnFail);

int nColorSystemAccent = GetImmersiveColorFromColorSetEx(GetImmersiveUserColorSetPreference(false, false), GetImmersiveColorTypeFromName(Marshal.StringToHGlobalUni("ImmersiveSystemAccent")), false, 0);
System.Drawing.Color colorSystemAccent = ColorTranslator.FromWin32(nColorSystemAccent);
// Test color
this.BackColor = colorSystemAccent;

关于c# - 托盘图标的 Windows 10 任务栏颜色检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56865923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com