2012-06-11 9 views

Respuesta

4

Hay dos maneras, utilizando IVSShell y 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; 
    } 
0

Me di cuenta de que esta era en realidad una respuesta.

Lo que se quiere recuperar no está expuesto por el IVsUIShell4 y por debajo

me gustaría añadir que a mi un profundo conocimiento de Visual Studio 2005-2010 ni siquiera tienen temas por ejemplo. Por lo menos, Visual Studio 2012 cambia esta mecánica. Podrías cargar el archivo de configuración pero no eran temas por decir.

Microsoft.VisualStudio.Shell.Interop ni siquiera tiene la enumeración obligatoria.

+0

Sí, pero sé que se puede cambiar el VS2010 tema, por lo que el tema debe estar en cualquier lugar, el registro de un archivo de configuración? Esa es mi pregunta. –

2

he encontrado una solución:

[Guid("0D915B59-2ED7-472A-9DE8-9161737EA1C5")] 
interface SVsColorThemeService 
{ 
} 

a continuación:

dynamic colorThemeService = _serviceProvider.GetService(typeof(SVsColorThemeService)); 
Guid id = colorThemeService.CurrentTheme.ThemeId; 
// should be one of the Microsoft.VisualStudio.Shell.KnownColorThemes 
+0

Es un poco desconcertante utilizar una interfaz sin miembros y sin ayuda de IntelliSense, pero esto parece funcionar para mí (VS 2015). – webjprgm

+1

Esta interfaz está disponible aquí: https://msdn.microsoft.com/en-us/library/microsoft.internal.visualstudio.shell.interop.svscolorthemeservice(v=vs.110).aspx – JoshVarty

+0

¿De dónde viene _serviceProvider? – cyanbeam

Cuestiones relacionadas