使用VSTO,如何获得有关MS Office配色方案更改的通知?
答案 0 :(得分:6)
希望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 :(得分:6)
请注意,(当然)在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”(白色主题)。
答案 2 :(得分:1)
我的代码类似于Mike Regan提供的代码。我做的另一件事是运行一个单独的线程,每秒都会检查这个注册表项。每当注册表值更改时,我都会触发自定义事件。 我的加载项中的其余代码处理事件并更改与此事件处理程序中的新主题相对应的UI元素。