반응형

* 윈도우 레지스트리에 읽고 쓰고 만들고 지우기 예제

레지스트리 메인화면

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using Microsoft.Win32;

namespace CSharp_Resistry
{
    public partial class Form1 : Form
    {
        string strTmp = "SOFTWARE\\"; //레지스트리 최상위 폴더 지정
        string strAppName = "RegistryTest";


        public Form1()
        {
            InitializeComponent();

            //쓰기
            WriteReg(strAppName, "Test1", "iii", "asdfasdf000");
            WriteReg(strAppName, "Test2", "iii", "asdfasdf111");
            WriteReg(strAppName, "Test3", "iii", "asdfasdf222");
            WriteReg(strAppName, "Test4", "iii", "asdfasdf333");

            //읽기
            //MessageBox.Show(ReadReg(strAppName,"Test1","iii"));

            //삭제
            //DeleteReg(strAppName);


            //등록된 목록 읽기
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(strTmp + strAppName);
            string[] str = rk.GetSubKeyNames();

            for (int iCount = 0; iCount < str.Length; iCount++)
            {
                lbList.Items.Add(str[iCount]);
            }


        }

        //레지스트리도 폴더 개념으로 접근...
        #region Registry Create & Read & Write & Delete...
        
        private bool DeleteReg(string strSubKey)
        {
            RegistryKey rk = Registry.CurrentUser.OpenSubKey(strTmp, true);
            try
            {
                //하위 폴더(레지스트리)가 있으면 삭제 안됨.
                //if(rk !=null) rkDeleteSubKey(strSubKey);

                //하위 폴더(레지스트리) 가 있던 없던 걍 삭제...
                if (rk != null) rk.DeleteSubKeyTree(strSubKey);
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }

        //레지스트리 쓰기
        private   bool WriteReg(string strAppName,
                                    string strSubKey,
                                    string strKey,
                                    string strValue)
        {

            RegistryKey rkReg = Registry.CurrentUser.OpenSubKey(strTmp + strAppName, true);
            //null 이면 폴더(레지스트리)가 없으므로 만듬...
            if (rkReg == null) rkReg = Registry.CurrentUser.CreateSubKey(strTmp  + strAppName);
            
            //OpenSubKey (하위폴더(레지스트리 이름) , 쓰기 선택 True 쓰기 False 및 인자가 없다면 읽기)
            RegistryKey rkSub = Registry.CurrentUser.OpenSubKey(strTmp + strAppName + "\\" + strSubKey, true);
            if (rkSub == null) rkSub = Registry.CurrentUser.CreateSubKey(strTmp + strAppName + "\\" + strSubKey);

            try
            {
                rkSub.SetValue(strKey, strValue);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
                return false;
            }
            return true;
        }
        //레지스트리 읽기
        private string ReadReg(string strAppName,
                                    string strSubKey,
                                    string strKey)
        {
            RegistryKey reg;
           
            try
            {
                reg = Registry.CurrentUser.OpenSubKey(strTmp + strAppName ).OpenSubKey(strSubKey);
            }
            catch (Exception ex)
            {
                return "";
            }
          
            return reg.GetValue(strKey, "").ToString();
        }

        #endregion

    }
}

 

아래의 그림을 보면 

HKEY_CUREENT_USER 가 트리뷰에서 보이게 됩니다.

Registry.CurrentUser 는 저 레지스트리 폴더를 가르키게 되며

Registry.LocalMachine는 그 아래에 있는 HKEY_LOCAL_MACHINE 으로 들어가게 됩니다.

 

위 소스 Registry.CurrentUer.OpenSubKey("SOFTWARE") 는

레지스트리에 HKEY_CURRENT_USER => Software 폴더를 열겠다는 뜻

 

*레지스트리 편집기 (시작 -> 실행 -> regedit)

  

레지스트리 편집기 실행 
레지스트리 프로그램 실행 후 편집기 실행

 

반응형

+ Recent posts