2012-06-11 28 views

Trả lời

4

Có hai cách, sử dụng IVSShell và 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

Tôi nhận ra đây thực sự là câu trả lời.

gì bạn muốn lấy ra không được tiếp xúc bởi IVsUIShell4 và dưới

Tôi muốn nói thêm rằng để kiến ​​thức của tôi Visual Studio 2005-2010 thậm chí không có chủ đề mỗi nói. Ít nhất Visual Studio 2012 thay đổi cơ chế này. Bạn có thể tải tệp cài đặt nhưng chúng không phải là chủ đề cho mỗi lần nói.

Microsoft.VisualStudio.Shell.Interop thậm chí không có yêu cầu liệt kê.

+0

Có, nhưng tôi biết rằng bạn có thể thay đổi VS2010 chủ đề, do đó, chủ đề phải ở bất kỳ nơi nào, đăng ký một tập tin cấu hình? Đó là câu hỏi của tôi. –

2

Tôi tìm thấy một giải pháp:

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

thì:

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

Đó là một chút bối rối khi sử dụng một giao diện không có thành viên và không có sự trợ giúp của IntelliSense, nhưng điều này dường như làm việc cho tôi (VS 2015). – webjprgm

+1

Giao diện này có sẵn tại đây: https://msdn.microsoft.com/en-us/library/microsoft.internal.visualstudio.shell.interop.svscolorthemeservice(v=vs.110).aspx – JoshVarty

+0

_serviceProvider đến từ đâu? – cyanbeam