ScpMonitor/RegistryProvider.cs (66 lines of code) (raw):

using System; using System.Collections; using System.Collections.Specialized; using System.Configuration; using System.Linq; using System.Windows.Forms; using Microsoft.Win32; namespace ScpMonitor { [Obsolete] public class RegistryProvider : SettingsProvider { public override string ApplicationName { get { return Application.ProductName; } set { } } public override void Initialize(string name, NameValueCollection Collection) { base.Initialize(ApplicationName, Collection); } public override void SetPropertyValues(SettingsContext Context, SettingsPropertyValueCollection PropertyValues) { foreach (SettingsPropertyValue PropertyValue in PropertyValues) { if (PropertyValue.IsDirty) GetRegKey(PropertyValue.Property).SetValue(PropertyValue.Name, PropertyValue.SerializedValue); } } public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext Context, SettingsPropertyCollection Properties) { var values = new SettingsPropertyValueCollection(); foreach (SettingsProperty Setting in Properties) { var Value = new SettingsPropertyValue(Setting); Value.IsDirty = false; Value.SerializedValue = GetRegKey(Setting).GetValue(Setting.Name); values.Add(Value); } return values; } private RegistryKey GetRegKey(SettingsProperty Property) { RegistryKey RegistryKey; if (IsUserScoped(Property)) { RegistryKey = Registry.CurrentUser; } else { RegistryKey = Registry.LocalMachine; } RegistryKey = RegistryKey.CreateSubKey(GetSubKeyPath()); return RegistryKey; } private static bool IsUserScoped(SettingsProperty property) { return (from DictionaryEntry entry in property.Attributes select (Attribute)entry.Value).OfType<UserScopedSettingAttribute>().Any(); } private string GetSubKeyPath() { return "Software\\" + Application.CompanyName + "\\" + Application.ProductName; } } }