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

时间:2014-05-25 04:23:06

标签: c++ windows

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

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

现在,如果我有多个themepack文件并且我已经应用了每个文件至少一次,那么所有的主题包都会在Themes文件夹中有一个相应的文件夹。现在我想知道在我的机器上以编程方式应用了哪个特定主题。

(当我们使用主题包文件时,Custom.theme文件未更新)

1 个答案:

答案 0 :(得分:1)

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

的用途例如,使用SZ_THDOCPROP_DISPLAYNAME调用GetCurrentThemeName() function和/或GetThemeDocumentationProperty() function。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中进行本地化。用户在选择主题时会看到不同的内容。