我正在用C#编写Visual Studio扩展,希望根据一天中的时间更改颜色主题(日落之后将应用深色主题-日出时根据用户的喜好应用蓝色/浅色主题)。
我可以使用对象WriteableSettingsStore
暴露的颜色来更改颜色主题ShellSettingsManager
。当我执行以下代码时,主题将在重新启动Visual Studio之后发生变化。
var settingsManager = new ShellSettingsManager(this);
var writeableUserStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
writeableUserStore.SetString("General", "CurrentTheme", GuidList.guidDarkTheme);
我希望自动更新主题-我尝试使用User32 API的UpdateWindow
和RedrawWindow
功能,但不会重新加载窗口。
因此,问题是-更改注册表中的CurrentTheme属性后,如何“重绘” Visual Studio?
ShellSettingsManager
使您只能在Windows注册表中访问和修改Visual Studio设置。在重新启动之前,Visual Studio将不会对您进行的任何更改,因为VS仅在启动时才从注册表读取设置。因此,这是错误的方法。
为了既改变设置,无需重启应用它们,你将不得不使用DTE2.Properties在讨论这里。以下代码段显示了可以在“环境/常规”页面(可以在其中更改主题)中以编程方式更改的所有设置:
EnvDTE.Properties generalProps = dte2Obj.Properties["Environment", "General"];
for (int i = 1; i <= generalProps.Count; ++i)
{
System.Diagnostics.Debug.WriteLine(
generalProps.Item(i).Name + ": " + generalProps.Item(i).Value);
}
在VS2013中,默认情况下,此代码将产生以下输出:
AnimationSpeed: 5
RichClientExperienceOptions: 65535
WindowMenuContainsNItems: 10
CloseButtonActiveTabOnly: True
UseTitleCaseOnMenu: False
AutoAdjustExperience: True
Animations: True
AutohidePinActiveTabOnly: False
ShowStatusBar: True
MRUListContainsNItems: 10
所有这些设置都可以更改,VS将立即应用更改。问题在于,没有可用于更改主题的属性。这就是为什么我认为无法完成的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句