有人知道如何在C#中使用VSPackage以编程方式获取颜色方案?从VSPackage获取Visual Studio颜色方案
我知道我可以使用VS2011的IVsUIShell5.GetThemedColor
,但我不知道如何从VS2005,VS2008或VS2010获取它。
在此先感谢。
有人知道如何在C#中使用VSPackage以编程方式获取颜色方案?从VSPackage获取Visual Studio颜色方案
我知道我可以使用VS2011的IVsUIShell5.GetThemedColor
,但我不知道如何从VS2005,VS2008或VS2010获取它。
在此先感谢。
有两种方法,使用IVSShell和IVSShell2:
private List<Color> GetColorList1()
{
IVsUIShell uiShell = (IVsUIShell)this.GetService(typeof(IVsUIShell));
List<Color> result = new List<Color>();
foreach (VSSYSCOLOR vsSysColor in Enum.GetValues(typeof(VSSYSCOLOR)))
{
uint win32Color;
uiShell.GetVSSysColor(vsSysColor, out win32Color);
Color color = ColorTranslator.FromWin32((int)win32Color);
result.Add(color);
}
return result;
}
private List<Color> GetColorList2()
{
IVsUIShell2 uiShell = (IVsUIShell2)this.GetService(typeof(IVsUIShell2));
List<Color> result = new List<Color>();
foreach (__VSSYSCOLOREX vsSysColor in Enum.GetValues(typeof(__VSSYSCOLOREX)))
{
uint win32Color;
uiShell.GetVSSysColorEx((int)vsSysColor, out win32Color);
Color color = ColorTranslator.FromWin32((int)win32Color);
result.Add(color);
}
return result;
}
我意识到这实际上是一个答案。
要检索什么不被IVsUIShell4及以下
我想这添加到我的knowlege的Visual Studio 2005 - 2010年甚至不必每说主题曝光。至少Visual Studio 2012改变了这个机制。你可以加载设置文件,但它们不是每个说的主题。
Microsoft.VisualStudio.Shell.Interop甚至没有require枚举。
我想,如果没有siutable API在那里,你总是可以做到这一点直接在注册表中。
你也可能wnat看看这些链接:How to: Access the Built-in Fonts and Color Scheme
我找到了一个解决方案:
[Guid("0D915B59-2ED7-472A-9DE8-9161737EA1C5")]
interface SVsColorThemeService
{
}
则:
dynamic colorThemeService = _serviceProvider.GetService(typeof(SVsColorThemeService));
Guid id = colorThemeService.CurrentTheme.ThemeId;
// should be one of the Microsoft.VisualStudio.Shell.KnownColorThemes
是的,但我知道,你可以改变VS2010主题,所以主题必须在任何地方,注册表配置文件?这是我的问题。 –