【发布时间】:2020-07-25 22:50:35
【问题描述】:
我写了一个类来检测当前的 Excel 主题是什么。
获取 Excel 当前办公主题:
//Declaration
string officeVersion;
int themeCode;
// Get Office Version first
officeVersion = "16.0";
// Goto the Registry Current Version
RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Office\" + officeVersion + @"\Common");
// Get Stored Theme
themeCode = (int)rk.GetValue("UI Theme", GlobalVar.COLORFUL);
然后根据themeCode的值,就可以判断出当前的Excel主题是什么了:
// Theme Constants
public const int COLORFUL = 0;
public const int DARKGREY = 3;
public const int BLACK = 4;
public const int WHITE = 5;
我的问题:
- 如何检测用户在 Excel 运行期间何时从 Excel 选项 更改 Office 主题?
- 另一方面,当用户从 Excel 选项编辑任何内容时,是否会触发任何 Excel 事件?
- 请问如何检测/捕获该事件?
我已经使用 Process Monitor 并获得了存储主题的注册表项的位置。但是我不能经常检查注册表,如果可以检测到该事件,我更愿意检测用户何时单击更多命令\Excel 选项。
欢迎您的回答和建议。提前致谢!
【问题讨论】:
-
假设我们暂时无法检测到主题更改事件...我猜您想更改您创建的加载项的外观。是否可以在加载项中添加另一个选项以通过用户选择手动更改其“主题”而不是自动检测它?
-
您可能会发现这种theme watcher 方法很有趣。
-
@PortlandRunner,你的建议很棒!我没有想到这一点。事实上,我可以在重新启动后将我的 Addin 主题与 Office 主题相适应,这就是我想知道事件是否存在的原因。但这也可能是一个很好的解决方案。对此点赞!
-
@PortlandRunner,我也在测试这个 theme_watcher,一旦我开始工作就会向你报告。事实上,我已经对其进行了更新以检测当前的 Office 版本,因为该示例仅适用于硬编码的 Office 15.0。我会尽量让它动态化,如果可行的话一定会在这里分享。
-
是的,请在可用时分享。我越想越想知道为什么微软没有为插件开发人员内置这个功能。也许这只是一个疏忽,但我敢肯定你不是唯一一个想要同样功能的人!
标签: c# excel vba visual-studio excel-addins