2010-09-02 2 views

ответ

5

Надеется, что-то лучше, существует с Office 2010. Вот что я использовал для Office 2007 и Word (Это не уведомление в любом случае, просто что-то, чтобы проверить):

const string OfficeCommonKey = 
    @"Software\Microsoft\Office\12.0\Common"; 
const string OfficeThemeValueName = "Theme"; 
const int ThemeBlue = 1; 
const int ThemeSilver = 2; 
const int ThemeBlack = 3; 

using (RegistryKey key = Registry.CurrentUser.OpenSubKey(OfficeCommonKey, false)) 
{ 
    int theme = (int)key.GetValue(OfficeThemeValueName,1); 

    switch (theme) 
    { 
     case ThemeBlue: 
      //... 
      break; 
     case ThemeSilver: 
      //... 
      break; 
     case ThemeBlack: 
      //... 
      break; 
     default: 
      //... 
      break; 
    } 
} 
1

У меня есть код, подобный что предоставил Майк Риган. Еще одна вещь, которую я делаю, - это запустить отдельный поток, который проверяет эту запись в реестре каждую секунду. Всякий раз, когда изменяется значение реестра, я запускаю настраиваемое событие. Остальная часть кода в моей надстройке обрабатывает событие и изменяет элементы пользовательского интерфейса, соответствующие новой теме в этом обработчике событий.

4

Обратите внимание, что (конечно) это было изменено в Бюро 2013. Следующие константы должны быть использованы вместо:

const string OfficeCommonKey = 
    @"Software\Microsoft\Office\15.0\Common"; 
const string OfficeThemeValueName = "UI Theme"; 
const int ThemeWhite = 0; 
const int ThemeLightGray = 1; 
const int ThemeDarkGray = 2; 

Обратите внимание, что если тема никогда не была установлена, то «UI Theme» ключ выиграл не существует. Я считаю, что по умолчанию это «0» («Белая тема»).

Смежные вопросы