2010년 1월 20일 수요일

레지스트리 읽고 쓰기

API를 이용해서 레지스트리에 한 항목을 생성하거나 기존 항목의 값을 읽어들이려면
어떻게 해야합니까 ?
레지스트리 관련 API를 사용하려면 winreg.h라는 헤더 파일을 소스에 포함해야 합니다.
레지스트리에 키를 생성하는 방법과 레지스트리에 존재하는 키의 값을 읽는 방법을
차례로 살펴보겠습니다.
레지스트리 키 생성 예제
// 예를 들어 HKEY_LOCAL_MACHINE밑의 SystemCurrentControlSetServicesGenPort라는 키를
// 생성하고 거기에 DWORD 타입의 값으로 Type을 만들고 문자열 타입의 값으로 Group
// 을 만들어 본다.
#include "winreg.h"
LONG error = 0;
HKEY hKey;
DWORD dwDisp, dwData;
char lpData[] = "Write this down";
// 먼저 만들려는 키가 이미 존재하는 것인지 살혀본다.
error = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SystemCurrentControlSetServicesGenPort",0, KEY_ALL_ACCESS, &hKey);
if (error != ERROR_SUCCESS)
// 없다면 새로 생성한다.
{
    // 키를 생성한다.
    error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SystemCurrentControlSetServicesGenPort",0, "REG_BINARY",REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, &dwDisp);
    // 위의 키 밑에 Type이란 DWORD 타입의 값을 만들고 1로 초기화
    dwData = 0x1;
    error = RegSetValueEx( hKey, "Type", 0, REG_DWORD,&dwData,4);
    // 위의 키 밑에 Group이란 문자열 타입의 값을 만들고 lpData의 값으로 초기화
    error = RegSetValueEx( hKey, "Group", 0, REG_SZ, lpData, strlen(lpData));
    // 키를 닫는다.
    RegCloseKey(hKey);
}
기존의 레지스트리 키에서 값 읽기
// HKEY_CURRENT_USERSoftwareNetscapeNetscape NavigatorMain 밑의 Install Directory
// 값의 문자열 값을 읽어들인다.
DWORD dwType, cbData;
HKEY hSubKey;
long lRet;
char pszString[255];
// 키를 오픈한다.
if ((lRet = RegOpenKeyEx(HKEY_CURRENT_USER,"SoftwareNetscapeNetscape NavigatorMain",0, KEY_READ | KEY_QUERY_VALUE , &hSubKey)) == ERROR_SUCCESS)
{
    cbData = 255;
    // 문자열 값을 읽어올 데이터의 크기를 준다.
    if ((lRet = RegQueryValueEx(hSubKey, "Install Directory",NULL, &dwType, pszString, &cbData)) == ERROR_SUCCESS)
    {
         // 제대로 읽힌 경우
    }else
    {
         // 에러가 발생한 경우
    }
    RegCloseKey(hSubKey);}
  
    레지스트리 키 삭제하기 -
    RegDeleteKey 함수를 사용한다.
[출처] API Tip|작성자 난뽀다

댓글 없음:

댓글 쓰기