Language/C# WPF

[C#] 레지스트리 읽기/쓰기 ( RegistryKey )

멱군 2014. 7. 5. 01:08

c# 에서 레지스트리를 읽고 쓰는 방법은 크게 어렵지 않다.

 

RegistryKey 클래스를 사용하면 된다.

 

RegistryKey 클래스를 사용하려면 소스 상단에

 

using Microsoft.Win32;

 

를 포함시켜주면 된다.

 

 

더보기
 

 Name

 키 이름

 SubKeyCount

 현재 키에 대한 기본 수준의 하위 키 개수

 ValueCount

 키값 개수

 Close

 키 닫음

 CreateSubKey

 하위 키 생성 / 열기

 DeleteSubKey

 하위 키 삭제

 DeleteSubKeyTree

 하위 키와 트리로 연결된 자식 노드 키 삭제

 DeleteValue

 키값 삭제

 Equals

 Object 비교

 Flush

 레지스트리 데이터 저장

 GetSubKeyNames

 하위키의 이름 모두 검색 (배열)

 GetValue

 키값 얻어옴

 GetValueNames

 키 이름이 포함된 모든 키값 얻어옴

 OpenRemoteBaseKey

 외부 컴퓨터에서 요청된 키를 나타내는 새 RegistryKey 를 열음

 OpenSubKey

 지정된 쓰기 권한을 사용하여 지정된 하위 키를 검색함

 SetValue

 키값 저장

 

 

 

자 먼저 레지스트리의 값을 생성해보자.

 

 

 

RegistryKey reg;
reg = Registry.LocalMachine.CreateSubKey("Software").CreateSubKey("RegistryKeyTest");

 

 

 

이렇게 하면 레지스트리의 값을 쓰거나 읽을 수 있게 되었다.

 

 

 

reg.SetValue("Text", "글을 입력하겠소"); // 값을 저장한다.

reg.GetValue("Text", "없음")                  // text라는 이름을 가진 값을 가져온다.

                                                         // 이때 값이 없다면 "없음" 이라고 값을 얻어온다.

reg.GetValue("Text")                            // text라는 이름을 가진 값을 가져온다.  

 

 

 

그래서 RegistryKey 클래스의 멤버는 많지만 주로 사용하는건 SetValue(), GetValue() 정도 이다.

 

여기서 레지스트리의 값을 삭제하려면 어떻게 해야 할까?

 

 

 

 

reg.DeleteSubKey("Text", false); // 값을 삭제한다.

Registry.LocalMachine.DeleteSubKey("Software\\RegistryKeyTest"); // 레지스트리키를 삭제한다.

 

 

 

와 같이 하면 된다.

 

RegistryKey 를 이용해서 예제 프로그램을 한번 만들어보자!!!

 

 

  

 

프로그램을 실행하면 레지스트리의 키값을 받아오면서 값을 읽어오고,

 

Reg Save/close 버튼을 누르면 레지스트리의 값을 저장하면서 프로그램을 닫는다.

 

Reg Delete 버튼을 누르면 생성한 레지스트를 삭제한다.

 

 

 

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 RegistryKeyTest
{
    public partial class Form1 : Form

    {

        string m_strText = "";

        int m_nNum = 0;

        bool m_bCheck = false;

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            RegistryKey reg;

            reg = Registry.LocalMachine.CreateSubKey("Software").CreateSubKey("RegistryKeyTest");

            m_strText = Convert.ToString(reg.GetValue("Text", ""));

            m_nNum = Convert.ToInt32(reg.GetValue("Num", 0));

            m_bCheck = Convert.ToBoolean(reg.GetValue("Check", false));

            if (m_strText == "" || m_nNum == 0 || !m_bCheck)

            {

                MessageBox.Show("레지스트리가 존재하지 않습니다.");

            }

                

            if (reg.ValueCount > 0)

            {

                m_strText = Convert.ToString(reg.GetValue("Text"));

                m_nNum = Convert.ToInt32(reg.GetValue("Num"));

                m_bCheck = Convert.ToBoolean(reg.GetValue("Check"));

            }

            else

            {

                MessageBox.Show("레지스트리가 존재하지 않습니다.");

            }

            reg.Close();

            textBox1.Text = m_strText;

            textBox2.Text = m_nNum.ToString();

            checkBox1.Checked = m_bCheck;

        }

   

        private void button1_Click(object sender, EventArgs e)

        {

            m_strText = textBox1.Text;

            m_nNum = int.Parse(textBox2.Text);

            m_bCheck = checkBox1.Checked;

 

            RegistryKey reg;

            reg = Registry.LocalMachine.CreateSubKey("Software").CreateSubKey("RegistryKeyTest");

            reg.SetValue("Text", m_strText);

            reg.SetValue("Num", m_nNum);

            reg.SetValue("Check", m_bCheck);

            reg.Close();

            this.Close();

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            RegistryKey reg;

            reg = Registry.LocalMachine.CreateSubKey("Software").CreateSubKey("RegistryKeyTest");

            reg.DeleteSubKey("Text", false);

            reg.DeleteSubKey("Num", false);

            reg.DeleteSubKey("Check", false);

            Registry.LocalMachine.DeleteSubKey("Software\\RegistryKeyTest");

            reg.Close();

            this.Close();

        }

    }
}

 

 

실행 > regedit 를 입력하여 레지스트리를 직접 확인해보자!

 

 

 

 

 

레지스트리의 값이 생성되고 삭제되는 걸 확인 할 수 있다.

 

RegistryKeyTest.zip
다운로드