2009년 10월 28일 수요일

CRegKey 사용 예제

레지스트리 사용예제는 많지만 대부분 API를 이용한 예제인지라 CRegKey 클래스 사용예제를 한번 만들어봤다. 아마 자주 사용하는 예제 중에 하나가 아닐까 싶다. 소스파일도 첨부해둔다.

#include <atlbase.h>

void CCRegKeyExDlg::OnBnClickedButton1()
{
 //DWORD 저장
 CRegKey RegKey;
 
 if(RegKey.Open(HKEY_LOCAL_MACHINE, L"SOFTWARE\\TestProg") == ERROR_SUCCESS) //키가 존재하면
 {
  RegKey.SetDWORDValue(L"DWORD", 1); //DWORD라는 네임으로 "1" 값을 저장.
 
  RegKey.Close(); //오브젝트를 닫는다.
 }
}
void CCRegKeyExDlg::OnBnClickedButton2()
{
 //String 저장
 CRegKey RegKey;
 //if(RegKey.Create(HKEY_LOCAL_MACHINE, L"SOFTWARE\\TestProg") == ERROR_SUCCESS) //(키 생성을 성공하면)키 생성과 동시에 값생성가능.
 if(RegKey.Open(HKEY_LOCAL_MACHINE, L"SOFTWARE\\TestProg") == ERROR_SUCCESS) //키가 존재하면
 {
  RegKey.SetStringValue(L"String", L"C:\\Program Files\\"); //String이라는 네임으로 지정한 문자저장 경로를 저장할때는 역슬레쉬 두개사용.
 
  RegKey.Close();
 }
}
void CCRegKeyExDlg::OnBnClickedButton3()
{
  //DWORD 읽기
 DWORD dwValue;
 DWORD dwSize = 1023;
 
 CRegKey RegKey;
  if(RegKey.Open(HKEY_LOCAL_MACHINE, L"SOFTWARE\\TestProg") == ERROR_SUCCESS) //키가 존재하면
  {
  if(RegKey.QueryDWORDValue(L"DWORD", dwValue) == ERROR_SUCCESS) //값이 존재하면 DWORD안에 데이타를 읽어온다.
  {
   RegKey.Close();//닫는다.
   CString strValue;
   strValue.Format(L"%d", dwValue);
   AfxMessageBox(strValue);
  }
  }
}
void CCRegKeyExDlg::OnBnClickedButton4()
{
  //String 읽기
 CString strValue;
 DWORD dwSize = 1023;
 
 CRegKey RegKey;
  if(RegKey.Open(HKEY_LOCAL_MACHINE, L"SOFTWARE\\TestProg") == ERROR_SUCCESS)
  {
  if(RegKey.QueryStringValue(L"String", strValue.GetBuffer(dwSize), &dwSize) == ERROR_SUCCESS)  //값(String)이 존재하면 GetBuffer를 사용하여 지정된 크기의 버퍼를 읽어온다.
  {
   RegKey.Close();//닫는다.
   strValue.ReleaseBuffer(); //읽어온 버퍼외에 필요없는 바이트를 버린다.
   AfxMessageBox(strValue); //최종적으로 리턴받은 strValue 값을 메시지박스에 출력한다.
  }
  }
}
void CCRegKeyExDlg::OnBnClickedButton5()
{
  //Value 삭제
 CRegKey RegKey;
 
 if(RegKey.Open(HKEY_LOCAL_MACHINE, L"SOFTWARE\\TestProg") == ERROR_SUCCESS)
  {
  RegKey.DeleteValue(L"DWORD");
  RegKey.DeleteValue(L"String");
  RegKey.Close();
 }
 
}
void CCRegKeyExDlg::OnBnClickedButton6()
{
 //Key 삭제
 CRegKey RegKey;
 
 if(RegKey.Open(HKEY_LOCAL_MACHINE, L"SOFTWARE") == ERROR_SUCCESS)
  {
  RegKey.DeleteSubKey(L"TestProg");
  RegKey.Close();
 }
}
void CCRegKeyExDlg::OnBnClickedButton7()
{
 //Key 생성
 CRegKey RegKey;
 
 if(RegKey.Create(HKEY_LOCAL_MACHINE, L"SOFTWARE\\TestProg") == ERROR_SUCCESS) //키 생성을 성공하면
 {
    RegKey.Close();
 }
}