[C#] 레지스트리 사용

Jaemoon Lee·2022년 10월 14일
0

[C샾]

목록 보기
4/13

프로그램을 만들 때, 특정 데이터를 설정 값으로 사용하고 싶을 때가 있다.
ex) IP, Port 라던가, 우리가 웹에서 사용하는 아이디 저장 기능 같이...

그럴때 로컬 프로그램에서 사용하기 좋은건 레지스트리 설정 기능!

일단 윈도우키를 눌러 "regedit"이나 "레지스트리 편집기"를 검색한다.

그럼 위 사진과 같이.. 내가 먼저 설정해놓은 PINCHECKSW 키에 SETTING-UPBOARDPORT와 같은 값이 저장되어있음을 확인할 수 있다.

이 저장된 레지스트리 값을 통해 프로그램을 켤 때마다 마지막에 연결했던 포트로 자동 연결되도록 프로그래밍할 수 있는 것이다.

기본적으로 내가 사용한 기능은
1. 레지스트리에 COM Port 키를 생성
2. 생성된 키에 COM Port 값 저장
3. 프로그램 실행 시 자동으로 저장된 COM Port 키값 불러오기
정도가 있겠다.

//Win32의 RegistryKey class를 사용하기 위해 선언한다.
using Microsoft.Win32;

//메인윈도우 함수 내에서 레지스트리 기능을 사용하기 위해 선언
public RegistryKey reg;

//설정한 레지스트리 값들 가져오는 함수
public MainWindow()
{     
	//저장된 레지스트리 값들 가져오기
	GetRegistryData();
            
	//프로그램 시작 시 자동으로 상판 연결되도록. 단, 기본 연결 포트는 가장 최근 연결 성공한 포트로 설정한다.
	if (Store.getInstance().topSerial.OpenComm(Properties.Settings.Default.rsCom, 115200, 8, StopBits.One, Parity.None, Handshake.None))
	{
    	Store.getInstance().twLog.WriteLog("상판연결 성공");

		//연결 성공한 포트를 레지스트리에 저장함.
		reg = Registry.CurrentUser.CreateSubKey("Software").CreateSubKey("PINCHECKSW").CreateSubKey("SETTING");
		reg.SetValue("UPBOARDPORT", Properties.Settings.Default.rsCom);

		ConnectUpBoard.Background = new SolidColorBrush(System.Windows.Media.Color.FromRgb(43, 200, 43));
	}
}
  1. 레지스트리 키값을 사용하기 위해 저장된 레지스트리 값들을 GetRegistryData() 함수를 이용해 가져온다.
  2. 레지스트리로 생성 및 저장된 UPBOARDPORT의 값변수 rsCom으로 OpenComm 함수를 수행한다. 이때, 상판 연결에 성공하면 연결 성공한 포트넘버를 다시 레지스트리에 저장한다.
//설정한 레지스트리 값들 가져오는 함수의 정의
public void GetRegistryData()
{
	reg = Registry.CurrentUser.CreateSubKey("Software").CreateSubKey("PINCHECKSW").CreateSubKey("SETTING");

	if (reg.GetValue("UPBOARDPORT") != null)
	{
		Properties.Settings.Default.rsCom = reg.GetValue("UPBOARDPORT").ToString();
		comboTop.SelectedItem = Properties.Settings.Default.rsCom;
	}
}
  1. 레지스트리 리스트 중 HKEY_CURRENT_USER→SOFTWARE→PINCHECKSW→SETTING 탭까지 접근.
    기본적으로 CreateSubKey 함수가 생성문이므로 해당 경로에 적힌 키들이 존재하지 않으면 순서대로 키를 생성하며 접근한다.
  2. 만약 UPBOARDPORT의 값이 존재하지 않으면,
    위 사진 프로그램 화면에 [PORT: 리스트]에 값을 기본 값으로 저장한다.
profile
초보개발세발자

0개의 댓글