Windows 7 附带多个内置主题。可以通过右键单击桌面并选择个性化来访问它们。在个性化下,有一个名为“航空主题”的部分,其中包含“建筑”“自然”等主题。
我尝试使用 uxtheme.dll 的 GetCurrentThemeName,但它实际上给出了样式名称:
“C:\Windows\resources\Themes\Aero\Aero.msstyles”,除非我当前的主题设置为 Windows Basic,在这种情况下它返回一个空字符串。是否有一个 API 可以实际返回主题名称,例如“自然”“建筑”等......?
我尝试的代码如下:
[DllImport("uxtheme", ExactSpelling = true, CharSet = CharSet.Unicode)]
public extern static Int32 GetCurrentThemeName(StringBuilder stringThemeName,
int lengthThemeName, StringBuilder stringColorName, int lengthColorName,
StringBuilder stringSizeName, int lengthSizeName);
StringBuilder stringThemeName = new StringBuilder(260);
StringBuilder stringColorName = new StringBuilder(260);
StringBuilder stringSizeName = new StringBuilder(260);
Int32 s = GetCurrentThemeName(stringThemeName, 260,stringColorName, 260,stringSizeName, 260);
看了MSDN文档后,它看起来像获取主题文档属性 http://msdn.microsoft.com/en-us/library/bb773402(v=VS.85).aspx可能就是您正在寻找的。
您需要将其与主题文件(您已在注册表中找到)结合使用,并传入 SZ_THDOCPROP_DISPLAYNAME 作为该方法的第二个参数。
此外,这里是一个具有用于 p/invoke 调用的 C# 方法包装器的站点:http://www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Windows.Forms/System/Windows/Forms/VisualStyles/UXTheme.cs.htm http://www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Windows.Forms/System/Windows/Forms/VisualStyles/UXTheme.cs.htm
希望有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)