获取已安装的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"
就像任何人都知道如何改变当前的主题,而不打开主题选择器与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)