Как получить название темы Windows 7 - PullRequest
5 голосов
/ 09 июля 2011

Windows 7 поставляется с несколькими встроенными темами. Доступ к ним можно получить, щелкнув правой кнопкой мыши на рабочем столе и выбрав «Персонализация». В разделе «Персонализация» есть раздел «Aero Themes», содержащий такие темы, как «Архитектура», «Природа» и т. Д.

Я пытался использовать GetCurrentThemeName файла uxtheme.dll, но на самом деле это имя стиля: «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);

1 Ответ

2 голосов
/ 09 июля 2011

После просмотра документации MSDN выглядит, что GetThemeDocumentationProperty может быть тем, что вы ищете.

Вы захотите использовать его вместе с файлом темы (которыйвы уже нашли в реестре), а также передав SZ_THDOCPROP_DISPLAYNAME в качестве второго параметра метода.

Кроме того, здесь есть сайт, который имеет обертку метода c # для вызова p / invoke: http://www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Windows.Forms/System/Windows/Forms/VisualStyles/UXTheme.cs.htm

Надеюсь, что поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...