在Visual Studio扩展中更改"颜色主题"

Cam*_*lby 16 c# visual-studio visual-studio-2012

我正在用C#编写一个Visual Studio扩展,希望根据一天中的时间改变颜色主题(日落之后将应用黑暗主题 - 在日出时,将根据用户偏好应用蓝色/浅色主题).

我可以使用对象WriteableSettingsStore曝光来更改颜色主题ShellSettingsManager.当我执行以下代码时,重新启动Visual Studio后主题更改.

var settingsManager = new ShellSettingsManager(this);
var writeableUserStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);

writeableUserStore.SetString("General", "CurrentTheme", GuidList.guidDarkTheme);
Run Code Online (Sandbox Code Playgroud)

我宁愿是自动具有主题更新-我已经试过利用的UpdateWindowRedrawWindow在USER32 API的功能,但窗口不重装.

所以问题是 - 在更改注册表中的CurrentTheme属性后,如何"重绘"Visual Studio?

Had*_*ais 11

ShellSettingsManager使您可以访问和修改Visual Studio设置,但只能在Windows注册表中.在重新启动之前,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);
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,在VS2013中,此代码将生成以下输出:

AnimationSpeed: 5
RichClientExperienceOptions: 65535
WindowMenuContainsNItems: 10
CloseButtonActiveTabOnly: True
UseTitleCaseOnMenu: False
AutoAdjustExperience: True
Animations: True
AutohidePinActiveTabOnly: False
ShowStatusBar: True
MRUListContainsNItems: 10
Run Code Online (Sandbox Code Playgroud)

所有这些设置都可以更改,VS将立即应用更改.问题是没有可以让您更改主题的属性.这就是我认为无法做到的原因.