Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何判断windows主题I';我在用什么?_C#_Wpf_Windows_Windows Themes - Fatal编程技术网

C# 如何判断windows主题I';我在用什么?

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

我试图使我的应用程序强制成为一个主题-这很简单,如下所示:

然而,我不知道我现在用的是什么主题。我使用的是WindowsXP默认主题,不管是什么。那篇文章说

指定版本很重要 和公钥令牌


…从何处获取该信息?

要获取主题名称,可以调用非托管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中只加载了一个主题,则在加载的程序集中循环也会告诉您当前主题的名称。

出于好奇,您为什么要这样做?你的计划的目的是什么?