C# 如何判断windows主题I';我在用什么?
我试图使我的应用程序强制成为一个主题-这很简单,如下所示: 然而,我不知道我现在用的是什么主题。我使用的是WindowsXP默认主题,不管是什么。那篇文章说 指定版本很重要 和公钥令牌C# 如何判断windows主题I';我在用什么?,c#,wpf,windows,windows-themes,C#,Wpf,Windows,Windows Themes,我试图使我的应用程序强制成为一个主题-这很简单,如下所示: 然而,我不知道我现在用的是什么主题。我使用的是WindowsXP默认主题,不管是什么。那篇文章说 指定版本很重要 和公钥令牌 …从何处获取该信息?要获取主题名称,可以调用非托管GetCurrentThemeName方法: public string GetThemeName() { StringBuilder themeNameBuffer = new StringBuilder(260); var error = GetCur
…从何处获取该信息?要获取主题名称,可以调用非托管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);
您可以通过右键单击GAC(Exporer中的open c:\Windows\Assembly)中的theme.dll(例如PresentationFramework.Aero)来查找版本和公钥标记,也可以使用代码来完成此操作。只需使用AppDomain.CurrentDomain.LoadedAssembly循环所有加载的程序集,然后找到所需的程序集:
foreach(Assembly a in AppDomain.CurrentDomain.LoadedAssemblies)
if(a.Name.StartsWith("PresentationFramework."))
return a.FullName;
请注意,如果当前AppDomain中只加载了一个主题,则在加载的程序集中循环也会告诉您当前主题的名称。出于好奇,您为什么要这样做?你的计划的目的是什么?