Как я могу сказать, какую тему Windows я использую?

StackOverflow https://stackoverflow.com/questions/2977421

Вопрос

Я пытаюсь сделать свою силу заявки на тему - это просто, как показано здесь: http://arbel.net/blog/archive/2006/11/03/forcing-wpf-to-use-apecifice-windows-theme.aspx

Тем не менее, я не знаю, какую тему я использую сейчас. Я использую тему по умолчанию Windows XP, что бы это ни было. В этой статье говорится

Важно указать версию и токен открытого ключа

... где мне получить эту информацию?

Это было полезно?

Решение

Чтобы получить имя темы, вы можете назвать метод Un -Management GetCurrentThemename:

public string GetThemeName()
{
  StringBuilder themeNameBuffer = new StringBuilder(260);
  var error = GetCurrentThemeName(themeNameBuffer, themeNameBuffer.Capacity, null, 0, null, 0);
  if(error!=0) Marshal.ThrowExceptionForHR(error);
  return themeNameBuffer.ToString();
}

[DllImport("uxtheme.dll", CharSet=CharSet.Auto)]
public static extern int GetCurrentThemeName(StringBuilder pszThemeFileName, int dwMaxNameChars, StringBuilder pszColorBuff, int dwMaxColorChars, StringBuilder pszSizeBuff, int cchMaxSizeChars);

Вы можете найти версию и токен открытого ключа, щелкнув правой кнопкой мыши тему .dll (например, PresentationFramework.aero) в GAC (Open C: Windows Assembly в Experer), или вы можете использовать код для этого. Просто проберите все загруженные сборки, используя appdomain.currentdomain.loadedassemblies и найдите тот, который вы хотите:

foreach(Assembly a in AppDomain.CurrentDomain.LoadedAssemblies)
  if(a.Name.StartsWith("PresentationFramework."))
    return a.FullName;

Обратите внимание, что зацикливание через загруженные сборки также сообщит вам текущее имя темы если Только одна тема была загружена в текущем приложении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top