2009-02-13 3 views
0

Я пытаюсь получить текущее имя темы Windows в C#, но оказалось, что оно немного сложнее, чем ожидалось. У меня есть пример кода из MSDN:Как получить текущее имя темы Windows?

public void Test() 
{ 
    StringBuilder themeFileName = new StringBuilder(0x200); 
    GetCurrentThemeName(themeFileName, themeFileName.Capacity, null, 0, null, 0); 
    string fileName = Path.GetFileName(VisualStyleInformation.ThemeFilename); 
    if (string.Equals("aero.msstyles", fileName, StringComparison.OrdinalIgnoreCase)) 
    { 
     // user is using aero theme 
    } 
} 

[DllImport("uxtheme.dll", CharSet = CharSet.Auto)] 
public static extern int GetCurrentThemeName(StringBuilder pszThemeFileName, int 
    dwMaxNameChars, StringBuilder pszColorBuff, int dwMaxColorChars, 
    StringBuilder pszSizeBuff, int cchMaxSizeChars); 

GetCurrentTheme() не изменяет StringBuilder. Я также попытался взглянуть на класс
System.Windows.Forms.VisualStyles.VisualStyleInformation, но он полон пустых значений. Кто-нибудь знает, как это сделать? Мне, должно быть, не хватает чего-то легкого, но я еще ничего не нашел, что работает.

ответ

3

That article on CodeProject описывает, как получить «текущую информацию о визуальном стиле» (поиск этой строки в статье).

Он содержит пример кода, как это сделать.

+0

Спасибо, я не видел этого. Чтение ... –

-1

Вы не передаете строковый конструктор по ссылке.

+0

Ну, ссылка передается по значению. я не думал, что функция изменит ссылочный объект. Я попробую это, когда у меня появится шанс, спасибо. –

+0

Это комментарий, а не ответ. –