Получить тему Windows? - PullRequest
       37

Получить тему Windows?

3 голосов
/ 18 декабря 2010

Я должен действительно знать, какую тему Windows использует мой пользователь.
Точнее, Classic, XP, Basic или Aero. (Основная тема как в Vista / 7 Windows Basic)
Я уже знаю, как найти, если это аэро, но как насчет других?


Ответ может быть на любом языке .NET (C #, VB.NET или C ++).


Если вам действительно нужно знать, почему на Земле мне нужно знать тему, тогда вот вам:
У меня есть несколько плавающих кнопок над заголовком формы, и мне нужно изменить их внешний вид в соответствии с темой Windows.
Пока мне удалось найти Aero / Classic.


Скриншоты результата, после решения проблемы: Minimize to tray button

Ответы [ 2 ]

4 голосов
/ 19 декабря 2010

Вы можете проверить реестр для текущей темы по адресу:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Themes

под строкой "CurrentTheme", которая имеет путь к текущей теме. ниже приведен код для проверки этого в C #.

using Microsoft.Win32;

public string GetTheme()
{
  string RegistryKey = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes";
  string theme;
  theme = (string) Registry.GetValue(RegistryKey, "CurrentTheme", string.Empty);
  theme = theme.Split('\\').Last().Split('.').First().ToString();
  return theme;
}
3 голосов
/ 18 декабря 2010

Вы можете проверить, активны ли темы, вызвав IsAppThemed / IsThemeActive , а затем проверить Aero, вызвав DwmIsCompositionEnabled . Вполне могут быть и другие способы сделать это !!

EDIT

Логика будет такой:

  1. Могу ли я импортировать IsAppThemed и IsThemeActive? Если нет, то я должен быть в Windows Classic (Win9x или Win2k).
  2. Что возвращает IsAppThemed and IsThemeActive? Если false, то я должен быть в Windows Classic.
  3. Могу ли я импортировать DwmIsCompositionEnabled? Если нет, тогда я должен быть на тему XP.
  4. Что возвращает DwmIsCompositionEnabled? Если это правда, то я Aero, в противном случае я Windows Basic.
...