获取已安装的Aero主题列表

本文关键字:列表 Aero 安装 获取 | 更新日期: 2023-09-27 18:11:19

我想获得Windows 7操作系统中安装的AERO主题的信息列表(带有文件名和真实主题名称)。

我还需要将当前主题更改为已安装的主题之一,但不使用process.start(ThemeFile),因为当我尝试时,个性化面板打开…

我知道这里是安装主题文件的文件名:"C:'Windows'Resources'Themes"

但是我在问是否存在比列出该目录的文件内容更好的方法,因为我也需要真实的名字,我想知道如何在不打开个性化面板的情况下将当前主题更改为其他。

举个例子…我的OS上只有两个Aero主题。

文件名为:

Aero.theme
Concave_seven.theme

但是出现在个性化面板中的主题名称是:

Windows 7
Concave 7

我想检索文件名和真实名称,将其存储在列表框中,以便为所需主题更改当前主题。

,

What I've try…

 ' Load theme names
 For Each Theme As System.IO.FileInfo In New System.IO.DirectoryInfo(Environment.GetEnvironmentVariable("windir") & "'Resources'Themes").GetFiles("*theme")
    ComboBox1.Items.Add(Theme.ToString.Substring(0, Theme.ToString.Length - 6))
 Next
' Change theme
' Process.start(ThemeFilename)
' rundll32.exe Shell32.dll,Control_RunDLL desk.cpl desk,@Themes /Action:OpenTheme /File:"C:'Windows'Resources'Themes'aero.theme"

获取已安装的Aero主题列表

就像任何人都知道如何改变当前的主题,而不打开主题选择器与rundll32等…接下来是我的个人技巧(没有在谷歌和任何地方,这纯粹是运气)。

第一步:禁用DWMCOMPOSITION,例如禁用Themes服务。

第二步:添加regkey来指定所需的新主题,指定msstyles文件,而不是。theme文件。

我用一个个人函数来做这个,但是你可以明白这个意思:

Reg_Set_Value("HKEY_CURRENT_USER'Software'Microsoft'Windows'CurrentVersion'ThemeManager", "DllName", "C:'windows'resources'themes'aero'aero.msstyles", Microsoft.Win32.RegistryValueKind.String)

第三步:重新启用DWM组合("Themes"服务)。

瞧!

更新:

我还注意到需要在启用主题之前将此值更改为0,以确保所有配色方案都更新:

Reg_Set_Value("HKEY_CURRENT_USER'Software'Microsoft'Windows'CurrentVersion'ThemeManager", "LoadedBefore", "0", Microsoft.Win32.RegistryValueKind.String)