2010-09-02 4 views

Répondre

5

Il faut espérer quelque chose de mieux existe avec Office 2010. Voici ce que j'utilisé pour Office 2007 et Word (Ce n'est pas une notification de quelque façon, juste quelque chose à vérifier):

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

je code similaire à ce que Mike Regan a fourni. Une chose supplémentaire que je fais est d'exécuter un thread séparé qui continue de vérifier cette entrée de registre chaque seconde. Chaque fois que la valeur du Registre change, je déclenche un événement personnalisé. Le reste du code dans mon complément gère l'événement et modifie les éléments d'interface utilisateur correspondant au nouveau thème dans ce gestionnaire d'événements.

4

Notez que (bien sûr) cela a été changé dans Office 2013. Les constantes suivantes devraient être utilisées à la place:

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; 

Notez que si le thème n'a jamais été défini, la touche « UI Theme » won n'existe pas. Je crois que c'est par défaut à "0" (thème blanc), cependant.

Questions connexes