Windows 7附带了几个内置主题.可以通过右键单击桌面并选择"个性化"来访问它们.在Personalize下,有一个名称为"航空主题"的部分包含"建筑","自然"等主题.
我尝试使用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);
Run Code Online (Sandbox Code Playgroud)
查看 MSDN 文档后,您可能正在寻找GetThemeDocumentationProperty 。
您需要将其与主题文件(您已在注册表中找到)结合使用,并传入 SZ_THDOCPROP_DISPLAYNAME 作为该方法的第二个参数。
此外,这里有一个站点,其中包含用于 p/invoke 调用的 C# 方法包装器: http: //www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Windows。表单/系统/Windows/Forms/VisualStyles/UXTheme.cs.htm
希望有帮助。