1. 程式人生 > >C#:登錄檔操作

C#:登錄檔操作

參考資料:

******************************************************************

介面:

程式碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btn1_Click(object sender, EventArgs e)  //開啟或新建並讀取登錄檔項值
        {
            try
            {
                //對應HKEY_CURRENT_USER基項分支
                RegistryKey cu1 = Registry.CurrentUser;

                //開啟path1項
                RegistryKey path1 = cu1.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System", true);

                
                if (path1 == null)  //判斷路徑是否存在
                {
                    //如果路徑不存在,則建立路徑
                    RegistryKey product = cu1.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
                    label2.Text = "已新建項!";
                }
                else  
                {
                    //如果路徑存在
                    string[] sValueNameColl;
                    sValueNameColl = path1.GetValueNames(); //獲取path1下所有鍵值的名稱
                    bool isValue1 = false;  //用於判斷鍵是否存在
                    bool isValue2 = false;  //用於判斷鍵是否存在
                    foreach (string sName in sValueNameColl)  //迴圈判斷兩個鍵值是否存在
                    {
                        if (sName == "DisableChangePassword")  //如果鍵名稱DisableChangePassword存在,則把isValue1置為真
                        {
                            isValue1 = true; 
                        }
                        if(sName == "dword")  //如果鍵名稱dword存在,則把isValue2置為真
                        {
                            isValue2 = true;
                        }
                    }

                    if (isValue1 == false) //如果鍵名稱DisableChangePassword不存在,則建立該鍵
                    {
                        //三個引數(名稱,資料/鍵值,型別)
                        //型別RegistryValueKind.String,即登錄檔中的REG_SZ,意思是“固定長度的unicode,以NULL結束的字串”。
                        path1.SetValue("DisableChangePassword", "china", RegistryValueKind.String);
                        label2.Text = "已新建鍵值DisableChangePassword!";
                    }
                    if (isValue2 == false) //如果鍵名稱dword不存在,則建立該鍵
                    {
                        //三個引數(名稱,資料/鍵值,型別)
                        //型別RegistryValueKind.DWord,即登錄檔中的REG_DWORD,意思是“32位數字,由 4 位元組長(32 位整數)的數字表示的資料”。
                        path1.SetValue("dword", "0", RegistryValueKind.DWord);
                        label2.Text = "已新建鍵值dword!";
                    }
                    //讀取鍵值DisableChangePassword,dword的值,並顯示
                    label2.Text = "DisableChangePassword的值為:" + path1.GetValue("DisableChangePassword").ToString() + "\r\ndword的值為:" + path1.GetValue("dword").ToString();
                    

                }

                cu1.Close();
                path1.Close();


            }
            catch (Exception)
            {

                throw;
            }
            
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label2.Text = "";
        }

        private void btn2_Click(object sender, EventArgs e)  //修改登錄檔項值
        {
            try
            {
                //對應HKEY_CURRENT_USER基項分支
                RegistryKey cu1 = Registry.CurrentUser;

                //開啟path1項
                RegistryKey path1 = cu1.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System", true);

                if (path1 == null)  //判斷路徑是否存在
                {
                    //如果路徑不存在
                    label2.Text = "該項不存在!";
                }
                else
                {
                    //如果路徑存在
                    string[] sValueNameColl;
                    sValueNameColl = path1.GetValueNames(); //獲取path1下所有鍵值的名稱
                    bool isValue1 = false;   //用於判斷鍵是否存在
                    foreach (string sName in sValueNameColl)  //迴圈判斷兩個鍵值是否存在
                    {

                        if (sName == "dword")  //如果鍵名稱dword存在,則把isValue1置為真
                        {
                            isValue1 = true;
                        }
                    }


                    if (isValue1 == true) //如果鍵名稱dword存在,則把該鍵的值修改為1
                    {
                        //三個引數(名稱,資料/鍵值,型別)
                        //型別RegistryValueKind.DWord,即登錄檔中的REG_DWORD,意思是“32位數字,由 4 位元組長(32 位整數)的數字表示的資料”。
                        path1.SetValue("dword", "1", RegistryValueKind.DWord);
                        label2.Text = "已修改鍵值dword的值!";
                    }
                    else
                    {
                        label2.Text = "鍵值dword不存在!";
                    }
                    //讀取鍵值DisableChangePassword,dword的值,並顯示
                    label2.Text = "dword的值已改為:" + path1.GetValue("dword").ToString();

                    
                }

                cu1.Close();
                path1.Close();

            }
            catch (Exception)
            {

                throw;
            }
        }
    }
}