using Microsoft.Win32; namespace Common { public static class RegistryExtension { public static bool GetValueBool(this RegistryKey regKey, string name, bool defaultValue) { object value = regKey.GetValue(name, defaultValue); if (value is string) { if ((string)value == "True") return true; else return false; } else return defaultValue; } public static bool? GetValueBoolNullable(this RegistryKey regKey, string name, bool? defaultValue) { object value = regKey.GetValue(name, defaultValue); if (value is string) { if ((string)value == "False") return false; else if ((string)value == "True") return true; else return null; } else return defaultValue; } public static string GetValueString(this RegistryKey regKey, string name, string defaultValue) { object value = regKey.GetValue(name, defaultValue); if (value is string) return (string)value; else return defaultValue; } public static int GetValueInt(this RegistryKey regKey, string name, int defaultValue) { object value = regKey.GetValue(name, defaultValue); if (value is int) return (int)value; else return defaultValue; } public static int? GetValueIntNullable(this RegistryKey regKey, string name, int? defaultValue) { object value = regKey.GetValue(name, defaultValue); if (value is int) return (int)value; else if (value is string && (string)value == "") return null; else return defaultValue; } public static long GetValueLong(this RegistryKey regKey, string name, long defaultValue) { object value = regKey.GetValue(name, defaultValue); if (value is string && long.TryParse(value.ToString(), out long longValue)) return longValue; else return defaultValue; } public static float GetValueFloat(this RegistryKey regKey, string name, float defaultValue) { object value = regKey.GetValue(name, defaultValue.ToString()); if (float.TryParse((string) value, out float num)) { return num; } else return defaultValue; } public static void SetValueBool(this RegistryKey regKey, string name, bool value) { if (value) regKey.SetValue(name, "True"); else regKey.SetValue(name, "False"); } public static void SetValueBoolNullable(this RegistryKey regKey, string name, bool? value) { if (value != null) { if (value.Value) regKey.SetValue(name, "True"); else regKey.SetValue(name, "False"); } else regKey.SetValue(name, ""); } public static void SetValueString(this RegistryKey regKey, string name, string value) { if (value == null) value = ""; regKey.SetValue(name, value); } public static void SetValueInt(this RegistryKey regKey, string name, int value) { regKey.SetValue(name, value); } public static void SetValueIntNullable(this RegistryKey regKey, string name, int? value) { if (value != null) { regKey.SetValue(name, value.Value); } else regKey.SetValue(name, ""); } public static void SetValueLong(this RegistryKey regKey, string name, long value) { regKey.SetValue(name, value); } public static void SetValueFloat(this RegistryKey regKey, string name, float value) { regKey.SetValue(name, value); } } }