Как я могу сказать, какую тему Windows я использую? - PullRequest
3 голосов
/ 05 июня 2010

Я пытаюсь сделать мое приложение форсированной темой - это просто, как показано здесь:

Однако я не знаю, какую тему я сейчас использую. Я использую тему Windows XP по умолчанию, что бы это ни было. Эта статья гласит

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

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

1 Ответ

5 голосов
/ 05 июня 2010

Чтобы получить имя темы, вы можете вызвать неуправляемый метод 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 (откройте c: \ Windows \ Assembly в Exporer) или используйте код, чтобы сделать это. , Просто переберите все загруженные сборки с помощью AppDomain.CurrentDomain.LoadedAssemblies и найдите тот, который вам нужен:

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

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

...