UxThemeWrapper.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / MS / Win32 / UxThemeWrapper.cs / 1 / UxThemeWrapper.cs

                            using System; 
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices; 
using System.Security;
using System.Windows; 
using System.Windows.Media; 
using System.Text;
using MS.Win32; 
using MS.Internal;

namespace MS.Win32
{ 
    /// 
    ///     Wrapper class for loading UxTheme system theme data 
    ///  
    internal static class UxThemeWrapper
    { 
        static UxThemeWrapper()
        {
            _isActive = SafeNativeMethods.IsUxThemeActive();
        } 

        internal static bool IsActive 
        { 
            get
            { 
                return _isActive;
            }
        }
 
        internal static string ThemeName
        { 
            get 
            {
                if (IsActive) 
                {
                    if (_themeName == null)
                    {
                        EnsureThemeName(); 
                    }
 
                    return _themeName; 
                }
                else 
                {
                    return "classic";
                }
            } 
        }
 
        internal static string ThemeColor 
        {
            get 
            {
                Debug.Assert(IsActive, "Queried ThemeColor while UxTheme is not active.");

                if (_themeColor == null) 
                {
                    EnsureThemeName(); 
                } 

                return _themeColor; 
            }
        }

        /// 
        /// Critical - as this code performs an elevation to get current theme name
        /// TreatAsSafe - the "critical data" is transformed into "safe data" 
        ///                      all the info stored is the currrent theme name and current color - e.g. "Luna", "NormalColor" 
        ///                      Does not contain a path - considered safe.
        /// 
        [SecurityCritical, SecurityTreatAsSafe]
        private static void EnsureThemeName()
        {
            StringBuilder themeName = new StringBuilder(Win32.NativeMethods.MAX_PATH); 
            StringBuilder themeColor = new StringBuilder(Win32.NativeMethods.MAX_PATH);
 
            if (UnsafeNativeMethods.GetCurrentThemeName(themeName, themeName.Capacity, 
                                                        themeColor, themeColor.Capacity,
                                                        null, 0) == 0) 
            {
                // Success
                _themeName = themeName.ToString();
                _themeName = Path.GetFileNameWithoutExtension(_themeName); 
                _themeColor = themeColor.ToString();
            } 
            else 
            {
                // Failed to retrieve the name 
                _themeName = _themeColor = String.Empty;
            }
        }
 
        internal static void OnThemeChanged()
        { 
            _isActive = SafeNativeMethods.IsUxThemeActive(); 

            _themeName = null; 
            _themeColor = null;
        }

        private static bool _isActive; 
        private static string _themeName;
        private static string _themeColor; 
    } 
}
 


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System; 
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices; 
using System.Security;
using System.Windows; 
using System.Windows.Media; 
using System.Text;
using MS.Win32; 
using MS.Internal;

namespace MS.Win32
{ 
    /// 
    ///     Wrapper class for loading UxTheme system theme data 
    ///  
    internal static class UxThemeWrapper
    { 
        static UxThemeWrapper()
        {
            _isActive = SafeNativeMethods.IsUxThemeActive();
        } 

        internal static bool IsActive 
        { 
            get
            { 
                return _isActive;
            }
        }
 
        internal static string ThemeName
        { 
            get 
            {
                if (IsActive) 
                {
                    if (_themeName == null)
                    {
                        EnsureThemeName(); 
                    }
 
                    return _themeName; 
                }
                else 
                {
                    return "classic";
                }
            } 
        }
 
        internal static string ThemeColor 
        {
            get 
            {
                Debug.Assert(IsActive, "Queried ThemeColor while UxTheme is not active.");

                if (_themeColor == null) 
                {
                    EnsureThemeName(); 
                } 

                return _themeColor; 
            }
        }

        /// 
        /// Critical - as this code performs an elevation to get current theme name
        /// TreatAsSafe - the "critical data" is transformed into "safe data" 
        ///                      all the info stored is the currrent theme name and current color - e.g. "Luna", "NormalColor" 
        ///                      Does not contain a path - considered safe.
        /// 
        [SecurityCritical, SecurityTreatAsSafe]
        private static void EnsureThemeName()
        {
            StringBuilder themeName = new StringBuilder(Win32.NativeMethods.MAX_PATH); 
            StringBuilder themeColor = new StringBuilder(Win32.NativeMethods.MAX_PATH);
 
            if (UnsafeNativeMethods.GetCurrentThemeName(themeName, themeName.Capacity, 
                                                        themeColor, themeColor.Capacity,
                                                        null, 0) == 0) 
            {
                // Success
                _themeName = themeName.ToString();
                _themeName = Path.GetFileNameWithoutExtension(_themeName); 
                _themeColor = themeColor.ToString();
            } 
            else 
            {
                // Failed to retrieve the name 
                _themeName = _themeColor = String.Empty;
            }
        }
 
        internal static void OnThemeChanged()
        { 
            _isActive = SafeNativeMethods.IsUxThemeActive(); 

            _themeName = null; 
            _themeColor = null;
        }

        private static bool _isActive; 
        private static string _themeName;
        private static string _themeColor; 
    } 
}
 


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK