¿Cómo puedo saber qué tema de Windows estoy usando?
-
24-10-2019 - |
Pregunta
Estoy tratando de hacer de mi fuerza de aplicación un tema: esto es sencillo como se muestra aquí: http://arbel.net/blog/archive/2006/11/03/forcing-wpf-to-use-a-specific-windows-theme.aspx
Sin embargo, no sé qué tema estoy usando ahora. Estoy usando el tema predeterminado de Windows XP, sea lo que sea. Ese artículo dice
Es importante especificar la versión y el token de clave pública
... ¿de dónde saco esa información?
Solución
Para obtener el nombre del tema, puede llamar al método GetCurrentThemename no administrado:
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);
Puede encontrar la versión y el token de clave pública haciendo clic derecho en el tema .dll (como PresentationFramework.aero) en el GAC (Open C: Windows Assembly en Exporer), o puede usar el código para hacerlo. Simplemente pase por todos los conjuntos cargados usando AppDomain.CurrentDomain.LoadedAssemblies y encuentre el que desee:
foreach(Assembly a in AppDomain.CurrentDomain.LoadedAssemblies)
if(a.Name.StartsWith("PresentationFramework."))
return a.FullName;
Tenga en cuenta que el bucle a través de los conjuntos cargados también le indicará el nombre del tema actual si Solo se ha cargado un tema en el AppDomain actual.