본문 바로가기
C++, MFC

[C++ / MFC] 레지스트리 값 저장, 불러오기 (RegCreateKeyEx)

by dev_drive 2022. 8. 6.
반응형

 

레지스트리 키 생성

■ RegCreateKeyEx

레지스트리 키를 만들거나 키가 이미 있는 경우 값을 읽을 수 있도록 키를 여는 함수입니다. 

 

🔽 함수 형식 및 파라미터 참고 

https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regcreatekeyexw

 

※ Sample Code

HKEY hKey = NULL;
DWORD dwDisposition;

if (RegCreateKeyEx(HKEY_CURRENT_USER,	// 키
    _T("SOFTWARE\\Dev"), 		// 경로
    0, NULL, 
    REG_OPTION_NON_VOLATILE,		// 비휘발성, 재부팅해도 값 보존
    KEY_WRITE, NULL,
    &hKey, &dwDisposition) == ERROR_SUCCESS)
{
	// 성공
}

RegCloseKey(hKey);

 

 

 

 

 

레지스트리 값 저장

 RegSetValueEx

레지스트리 키 아래에 지정된 값의 데이터 및 유형을 설정하는 함수입니다.

 

🔽 함수 형식 및 파라미터 참고 

https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regsetvalueexw

 

※ Sample Code

HKEY hKey = NULL;
DWORD dwDisposition;
	
if (RegCreateKeyEx(HKEY_CURRENT_USER,
    _T("SOFTWARE\\Dev"), 0,
    NULL, REG_OPTION_NON_VOLATILE,
    KEY_WRITE, NULL,
    &hKey, &dwDisposition) == ERROR_SUCCESS)
{
    // CString 값 저장
    CString sValue1 = _T("Value1");
    CString sData = _T("data"); 
    if (RegSetValueEx(hKey, sValue1, 0, REG_SZ, 
        (CONST BYTE*)(LPCTSTR)sData, (DWORD)(_tcslen(sData) + 1) * sizeof(TCHAR)) == ERROR_SUCCESS)
    {
        // 성공
    }

    // DWORD 값 저장
    CString sValue2 = _T("Value2");
    DWORD dData = 5;
    if (RegSetValueEx(hKey, sValue2, 0, REG_DWORD, 
        (CONST BYTE*) & dData, sizeof(dData)) == ERROR_SUCCESS)
    {
        // 성공
    }
}

RegCloseKey(hKey);

 

 

 

레지스트리 값 불러오기

RegQueryValueEx

레지스트리 키와 값 이름에 대한 형식 및 데이터를 검색하는 함수입니다..

 

 

🔽 함수 형식 및 파라미터 참고 

https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regqueryvalueexw

 

※ Sample Code

HKEY hKey = NULL;
DWORD dwDisposition;
DWORD dwDataSize = 0;
TCHAR* pPath = NULL;

if (RegCreateKeyEx(HKEY_CURRENT_USER,
    _T("SOFTWARE\\Dev"), 0,
    NULL, REG_OPTION_NON_VOLATILE,
    KEY_READ, NULL,
    &hKey, &dwDisposition) == ERROR_SUCCESS)
{
    // CString 값 불러오기
    CString sValue1 = _T("Value1");
    if (RegQueryValueEx(hKey, sValue1,
        NULL, NULL, NULL, &dwDataSize) == ERROR_SUCCESS)
    {
        if (dwDataSize)
        {
            pPath = new TCHAR[dwDataSize];
            if (RegQueryValueEx(hKey, sValue1,
                NULL, NULL, (LPBYTE)pPath, &dwDataSize) == ERROR_SUCCESS)
            {
                // 성공
                CString sResult;
                sResult = pPath;
                delete pPath;
            }
        }
    }

    // DWORD 값 불러오기
    CString sValue2 = _T("Value2");
    DWORD dResult;
    dwDataSize = sizeof(dResult);
    if (RegQueryValueEx(hKey, sValue2,
        NULL, NULL, (LPBYTE)&dResult, &dwDataSize) == ERROR_SUCCESS)
    {
        //성공

    }
}

RegCloseKey(hKey);

 

반응형

댓글