2012-06-11 9 views

risposta

4

Ci sono due modi, utilizzando IVSShell e 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

Mi sono reso conto che questa era in realtà una risposta.

Che cosa si vuole recuperare non è esposta dal IVsUIShell4 e sotto

vorrei aggiungere che al mio knowlege Visual Studio 2005-2010 non hanno nemmeno i temi per dire. Per lo meno Visual Studio 2012 cambia questa meccanica. È possibile caricare il file delle impostazioni ma non erano temi per dire.

Microsoft.VisualStudio.Shell.Interop non ha nemmeno l'enumerazione richiesta.

+0

Sì, ma so che è possibile cambiare il VS2010 tema, quindi il tema deve essere in qualsiasi posto, il registro un file di configurazione? Questa è la mia domanda. –

2

ho trovato una soluzione:

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

poi:

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

È un po 'sconcertante usare un'interfaccia senza membri e nessuna guida IntelliSense, ma sembra funzionare per me (VS 2015). – webjprgm

+1

Questa interfaccia è disponibile qui: https://msdn.microsoft.com/en-us/library/microsoft.internal.visualstudio.shell.interop.svscolorthemeservice(v=vs.110).aspx – JoshVarty

+0

Da dove proviene _serviceProvider? – cyanbeam

Problemi correlati