Как я могу сказать, какую тему Windows я использую?
-
24-10-2019 - |
Вопрос
Я пытаюсь сделать свою силу заявки на тему - это просто, как показано здесь: 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;
Обратите внимание, что зацикливание через загруженные сборки также сообщит вам текущее имя темы если Только одна тема была загружена в текущем приложении.