using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; using System.IO; using System.Text.RegularExpressions; namespace BSE.Windows.Forms { static class DisplayInformation { #region FieldsPrivate [ThreadStatic] private static bool m_bIsThemed; private const string m_strRegExpression = @".*\.msstyles$"; #endregion #region Properties internal static bool IsThemed { get { return m_bIsThemed; } } #endregion #region MethodsPrivate static DisplayInformation() { SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(DisplayInformation.OnUserPreferenceChanged); DisplayInformation.SetScheme(); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { DisplayInformation.SetScheme(); } private static void SetScheme() { if (VisualStyleRenderer.IsSupported) { if (!VisualStyleInformation.IsEnabledByUser) { return; } StringBuilder stringBuilder = new StringBuilder(0x200); int iResult = NativeMethods.GetCurrentThemeName(stringBuilder, stringBuilder.Capacity, null, 0, null, 0); if (iResult == 0) { Regex regex = new Regex(m_strRegExpression); m_bIsThemed = regex.IsMatch(Path.GetFileName(stringBuilder.ToString())); } } } #endregion static class NativeMethods { [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)] public static extern int GetCurrentThemeName(StringBuilder pszThemeFileName, int dwMaxNameChars, StringBuilder pszColorBuff, int dwMaxColorChars, StringBuilder pszSizeBuff, int cchMaxSizeChars); } } }