注册表

 

 

using System;
using Microsoft.Win32;
using System.Windows.Forms;

namespace WHC.Framework.Commons
{
    /// <summary>
    /// 注册表操作辅助类,通过默认指定注册表的前缀路径,减少调用复杂性。
    /// </summary>
    public sealed class RegistryHelper
    {
        #region 基础操作(读取和保存)
        private static string Software_Key = @"Software\DeepLand\OrderWater";

        /// <summary>
        /// 获取注册表项的值。如果该键不存在,则返回空字符串。
        /// </summary>
        /// <param name="key">注册表键</param>
        /// <returns>指定键返回的值</returns>
        public static string GetValue(string key)
        {
            return GetValue(Software_Key, key);
        }

        /// <summary>
        /// 获取注册表项的值。如果该键不存在,则返回空字符串。
        /// </summary>
        /// <param name="softwareKey">注册表键的前缀路径</param>
        /// <param name="key">注册表键</param>
        /// <returns>指定键返回的值</returns>
        public static string GetValue(string softwareKey, string key)
        {
            return GetValue(softwareKey, key, Registry.CurrentUser);
        }

        /// <summary>
        /// 获取注册表项的值。如果该键不存在,则返回空字符串。
        /// </summary>
        /// <param name="softwareKey">注册表键的前缀路径</param>
        /// <param name="key">注册表键</param>
        /// <param name="rootRegistry">开始的根节点(Registry.CurrentUser或者Registry.LocalMachine等)</param>
        /// <returns>指定键返回的值</returns>
        public static string GetValue(string softwareKey, string key, RegistryKey rootRegistry)
        {
            const string parameter = "key";
            if (null == key)
            {
                throw new ArgumentNullException(parameter);
            }

            string strRet = string.Empty;
            try
            {
                RegistryKey regKey = rootRegistry.OpenSubKey(softwareKey);
                strRet = regKey.GetValue(key).ToString();
            }
            catch
            {
                strRet = "";
            }
            return strRet;
        }

        /// <summary>
        /// 保存键值到注册表
        /// </summary>
        /// <param name="key">注册表键</param>
        /// <param name="value">键的值内容</param>
        /// <returns>如果保存成功返回true,否则为false</returns>
        public static bool SaveValue(string key, string value)
        {
            return SaveValue(Software_Key, key, value);
        }

        /// <summary>
        /// 保存键值到注册表
        /// </summary>
        /// <param name="softwareKey">注册表键的前缀路径</param>
        /// <param name="key">注册表键</param>
        /// <param name="value">键的值内容</param>
        /// <returns>如果保存成功返回true,否则为false</returns>
        public static bool SaveValue(string softwareKey, string key, string value)
        {
            return SaveValue(softwareKey, key, value, Registry.CurrentUser);
        }

        /// <summary>
        /// 保存键值到注册表
        /// </summary>
        /// <param name="softwareKey">注册表键的前缀路径</param>
        /// <param name="key">注册表键</param>
        /// <param name="value">键的值内容</param>
        /// <param name="rootRegistry">开始的根节点(Registry.CurrentUser或者Registry.LocalMachine等)</param>
        /// <returns>如果保存成功返回true,否则为false</returns>
        public static bool SaveValue(string softwareKey, string key, string value, RegistryKey rootRegistry)
        {
            const string parameter1 = "key";
            const string parameter2 = "value";
            if (null == key)
            {
                throw new ArgumentNullException(parameter1);
            }

            if (null == value)
            {
                throw new ArgumentNullException(parameter2);
            }

            RegistryKey reg;
            reg = rootRegistry.OpenSubKey(softwareKey, true);

            if (null == reg)
            {
                reg = rootRegistry.CreateSubKey(softwareKey);
            }
            reg.SetValue(key, value);

            return true;
        } 
        #endregion

        #region 自动启动程序设置

        /// <summary>
        /// 检查是否随系统启动
        /// </summary>
        /// <returns></returns>
        public static bool CheckStartWithWindows()
        {
            RegistryKey regkey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
            if (regkey != null && (string)regkey.GetValue(Application.ProductName, "null", RegistryValueOptions.None) != "null")
            {
                Registry.CurrentUser.Flush();
                return true;
            }

            Registry.CurrentUser.Flush();
            return false;
        }

        /// <summary>
        /// 设置随系统启动
        /// </summary>
        /// <param name="startWin"></param>
        public static void SetStartWithWindows(bool startWin)
        {
            RegistryKey regkey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
            if (regkey != null)
            {
                if (startWin)
                {
                    regkey.SetValue(Application.ProductName, Application.ExecutablePath, RegistryValueKind.String);
                }
                else
                {
                    regkey.DeleteValue(Application.ProductName, false);
                }

                Registry.CurrentUser.Flush();
            }
        }

        #endregion
    }
}

 

posted @ 2022-03-11 08:49  彭二狗的牵引绳  阅读(72)  评论(0)    收藏  举报