如何获取Windows 7主题名称

use*_*240 5 c# winapi

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)

Bri*_*haw 2

查看 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

希望有帮助。