如何获取Windows 7主题名称

5

Windows 7内置了几个主题,可以通过右键单击桌面并选择“个性化”来访问它们。在个性化下,有一个名为“Aero Themes”的部分,包含诸如“建筑”“自然”等主题。

我尝试使用uxtheme.dll的GetCurrentThemeName,但它实际上给出了样式名称:“C:\ Windows \ resources \ Themes \ Aero \ Aero.msstyles”,除非我的当前主题设置为Windows Basic,在这种情况下它返回一个空字符串。是否有一个API实际上返回主题名称,例如“自然”、“建筑”等等?

我尝试的代码如下:

[DllImport("uxtheme", ExactSpelling = true, CharSet = CharSet.Unicode)] 
public extern static Int32 GetCurrentThemeName(StringBuilder stringThemeName, 
    int lengthThemeName, StringBuilder stringColorName, int lengthColorName, 
    StringBuilder stringSizeName, int lengthSizeName);

    StringBuilder stringThemeName = new StringBuilder(260);
    StringBuilder stringColorName = new StringBuilder(260);
    StringBuilder stringSizeName = new StringBuilder(260);

    Int32 s = GetCurrentThemeName(stringThemeName, 260,stringColorName, 260,stringSizeName, 260);

1
我找到了一个注册表键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes,其中包含一个条目:“CurrentTheme”,用于存储主题文件名,而不是主题视觉样式,这与我的原帖中提到的被错误命名的API不同。例如,对于Nature Theme,它获取的值为:“C:\Windows\resources\Themes\nature.theme”,这已经足够好让我解析并获得名称了。当然,如果主题文件名与UI中的实际主题显示名称不匹配,则会有问题,但在我的有限场景中,我永远不会遇到这种情况。 - user577240
1
在注册表周围潜伏通常不是一个好主意,因为它更像是一些实现细节而不是其他任何东西。正如Brian Dishaw提到的GetThemeDocumentationProperty()似乎可以达到你想要的效果。 - In silico
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接