Получить список установленных тем Aero

Я хочу получить список информации (с именем файла и реальным названием темы) об установленных темах AERO в ОС Windows 7.

Также мне нужно изменить текущую тему на одну из установленных тем, но без использования process.start(ThemeFile), потому что панель персонализации открывается, когда я пытаюсь это сделать...

Я знаю, что вот файлы установленных тем, чтобы получить имена файлов: "C:\Windows\Resources\Themes"

Но я спрашиваю, существует ли лучший способ, чем перечисление содержимого файла этого каталога, потому что мне тоже нужны настоящие имена, и я хочу знать, как изменить текущую тему на другую, не открывая панель персонализации.

Пример тому... У меня в ОС только две темы 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"

person ElektroStudios    schedule 28.04.2013    source источник
comment
Ничего, потому что я не нашел информации о том, как получить НАСТОЯЩИЕ названия тем и как изменить текущую тему на другую молча. То, что я пробовал, это простой directory.Getfiles и process.start.   -  person ElektroStudios    schedule 29.04.2013
comment
google.com/   -  person FrostyFire    schedule 29.04.2013
comment
@JABFreeware Спасибо, но я погуглил, прежде чем спрашивать, и решения process.start и rundll открывают селектор тем.   -  person ElektroStudios    schedule 29.04.2013


Ответы (1)


Ну, если кто-нибудь знал, как изменить текущую тему, не открывая селектор темы с помощью rundll32 и т. д., то вот мой личный трюк (которого нет в Google и нигде, это чистая удача).

Первый шаг: отключите 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)
person ElektroStudios    schedule 29.04.2013