使用しているWindowsテーマをどのように見分けることができますか?

StackOverflow https://stackoverflow.com/questions/2977421

質問

私は自分のアプリケーションをテーマにしようとしています - これはここに示すように簡単です: http://arbel.net/blog/archive/2006/11/03/forcing-wpf-to-use-apecific-windows-theme.aspx

しかし、私は今どのテーマを使っているのかわかりません。 Windows XPのデフォルトテーマを使用しています。その記事によると

バージョンと公開キートークンを指定することが重要です

...その情報はどこで入手できますか?

役に立ちましたか?

解決

テーマ名を取得するには、管理されていない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でC: Windows アセンブリを開く)でテーマ.dll(PresentationFramework.aeroなど)を右クリックすることで、バージョンと公開キーのトークンを見つけるか、コードを使用してそれを行うことができます。 appdomain.currentdomain.loadedassembliesを使用して、すべてのロードされたアセンブリをループして、必要なものを見つけてください。

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

ロードされたアセンブリをループすると、現在のテーマ名も表示されることに注意してください もしも 現在のAppDomainには1つのテーマのみがロードされています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top