获取已安装的Aero主题列表

时间:2013-04-28 21:47:00

标签: c# .net windows vb.net aero

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

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

我知道这里是安装的主题文件来获取文件名:“C:\ Windows \ Resources \ Themes”

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

这方面的一个例子......我的操作系统上只有两个Aero主题。

文件名为:

Aero.theme
Concave_seven.theme

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

Windows 7
Concave 7

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

更新

我尝试过的......

 ' 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"

1 个答案:

答案 0 :(得分:0)

好像任何人都知道如何更改当前主题而不用rundll32等打开主题选择器...然后在这里我们去个人技巧(这不是谷歌和任何地方,这是纯粹的运气)。

第一步:禁用DWMCOMPOSITION,例如禁用“主题”服务。

第二步:添加一个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合成(“主题”服务)。

瞧!

  

更新:

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

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