使用しているWindowsテーマをどのように見分けることができますか?
-
24-10-2019 - |
質問
私は自分のアプリケーションをテーマにしようとしています - これはここに示すように簡単です: 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つのテーマのみがロードされています。
所属していません StackOverflow