2012-06-11 16 views

Odpowiedz

4

Istnieją dwa sposoby, przy użyciu IVSShell i 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

Zdałem sobie sprawę, że to była rzeczywiście odpowiedź.

Co chcesz pobrać nie jest wystawiony przez IVsUIShell4 i poniżej

Chciałbym dodać, że do mojego wiedza Visual Studio 2005-2010 nawet nie ma tematów na powiedzieć. Przynajmniej Visual Studio 2012 zmienia tę mechanikę. Możesz załadować plik ustawień, ale nie były one tematami na wypowiedź.

Microsoft.VisualStudio.Shell.Interop nawet nie wymaga wyliczenia.

+0

Tak, ale wiem, że można zmienić VS2010 motywu, więc motyw musi być w dowolnym miejscu, w rejestrze plik konfiguracyjny? To jest moje pytanie. –

2

znalazłem rozwiązanie:

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

następnie:

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

To trochę niepokojące, aby korzystać z interfejsu bez członków i bez pomocy IntelliSense, ale wydaje się, że działa dla mnie (VS 2015). – webjprgm

+1

Ten interfejs jest dostępny tutaj: https://msdn.microsoft.com/en-us/library/microsoft.internal.visualstudio.shell.interop.svscolorthemeservice(v=vs.110).aspx – JoshVarty

+0

Skąd się wzięło _serviceProvider? – cyanbeam

Powiązane problemy