2010-09-02 35 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

我有类似的代码迈克里根提供了什么。我做的一件额外的事情是运行一个单独的线程,每秒都会检查这个注册表项。每当注册表值发生变化时,我都会触发一个自定义事件。 我的加载项中的其余代码处理事件并更改此事件处理程序中与新主题对应的UI元素。

4

注意,(当然)这已经在Office 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主题”键韩元不存在。不过,我相信它默认为“0”(白色主题)。