我怎么知道哪个主题包在我的系统上被应用?

通常当我们双击一个themepack文件,它被应用在我们的系统上,并且与themepack具有相同名称的相应文件夹被保存在

C:\Users\<username>\AppData\Local\Microsoft\Windows\Themes 

现在,如果我有多个主题背景文件,并且每个主题背景至less应用了一次,那么所有主题背景都将在主题文件夹中具有相应的文件夹。 现在我想知道哪些特定的主题应用在我的机器上,以编程方式。

(当我们使用一个themepack文件Custom.theme文件没有更新)

我很确定没有可以检索这些信息的API。 这是有道理的,这是不相关的。 应用程序永远不需要知道用户选择的主题包的名称。

使用API​​可以获得什么,以及有用的是用户启用的主题的名称和属性。 例如,使用GetThemeDocumentationProperty()调用GetCurrentThemeName()函数和/或GetThemeDocumentationProperty()函数 .aspx)会告诉您用户是否启用了Aero主题。 或者,如果他们使用的是不是Aero的自定义主题。 可以肯定的是,我测试过了,这些函数都没有返回我当前选择的主题包的名称。

但是,您可以阅读注册表以获取您所需的信息。 在以下位置找到它:

 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\CurrentTheme 

该值将包含与当前所选主题包的完整路径对应的字符串,例如:

 C:\Users\billg\AppData\Local\Microsoft\Windows\Themes\Pink Polka Dots.theme 

如果你愿意,你可以去除路径规格和扩展名,只使用文件名作为主题包的名称,例如Pink Polka Dots

但这不是一个完整的解决方案,因为它不考虑本地化。 尤其是使用系统提供的主题包时,文件名将以英文显示,但主题包的名称将在UI中进行本地化。 用户在选择主题时会看到不同的东西。