2015-10-10 3 views
0

Как получить цвет акцента из окна? Потому что я хочу, чтобы ToolStrip имели тот же цвет, что и цвет акцента окна.
Я искал его в Google, и все они были частью Windows Phone или не работали.
Может кто-нибудь помочь мне, пожалуйста?Get Accent color of window

+1

В WinForms такого термина нет. Взгляните на класс [SystemColors] (https://msdn.microsoft.com/en-us/library/system.drawing.systemcolors (v = vs.110) .aspx) для доступных системных цветов. – Dmitry

+0

Я не это имел в виду. Я имел в виду это. Heres Imgur ссылка: http://imgur.com/XERleXu –

+0

Попробуйте следующее: [Извлечение цветов темы для Windows 8] (https://www.quppa.net/blog/2013/01/02/retrieving-windows-8-theme -цвета/). – Dmitry

ответ

2

Вы можете использовать следующий код:

internal static class NativeMethods 
{ 
    [DllImport("dwmapi.dll", EntryPoint="#127")] 
    internal static extern void DwmGetColorizationParameters(ref DWMCOLORIZATIONcolors colors); 
} 

public struct DWMCOLORIZATIONcolors 
{ 
    public uint ColorizationColor, 
     ColorizationAfterglow, 
     ColorizationColorBalance, 
     ColorizationAfterglowBalance, 
     ColorizationBlurBalance, 
     ColorizationGlassReflectionIntensity, 
     ColorizationOpaqueBlend; 
} 

private static Color GetWindowColorizationColor(bool opaque) 
{ 
    var colors = NativeMethods.DwmGetColorizationParameters(); 

    return Color.FromArgb((byte)(opaque ? 255 : colors.ColorizationColor >> 24), 
     (byte)(colors.ColorizationColor >> 16), 
     (byte)(colors.ColorizationColor >> 8), 
     (byte)colors.ColorizationColor); 
} 

Если вы хотите обновить цвет, когда он получает изменен во время вашей работы программы смотрите this пост!

+0

Это не скомпилируется. – Dmitry

+0

, где происходит ошибка? вы добавили директиву System.Runtime: InteropServices? – cramopy

+0

Вы когда-нибудь запускали его? Пожалуйста, сделай. Подсказка: Каков тип переменной params ('var params = ...')? – Dmitry