본문 바로가기
프로그래밍/MFC

MFC 레지스터리 관리

by 완소루피 2020. 11. 2.
728x90
반응형

정의 부분

#define SHCU HKEY_CURRENT_USER
#define KEY "Software\\Vision Inspection\\VisionInspection\\"
#define DEF_REGKEY_SIZE 256
#define DEF_REGDATA_SIZE 256
//레지스트리 키 생성
int CreateReg(HKEY key, CString strSubKey);
//레지스트리 키 삭제
int DeleteRegKey(HKEY key, CString strSubKey);
int DeleteRegValue(HKEY key, CString strSubKey, CString strValName);   
//레지스트리 값 읽기
int ReadReg(HKEY key, CString strSubKey, CString strKey, CString &strVal);
//레지스트리 값 쓰기
int WriteReg(HKEY key, CString strSubKey, CString strKey, CString strVal, DWORD dwType); 
 

 

 

구현 부분

 

//레지스트리 키 생성 

int CreateReg(HKEY key, CString strSubKey)   
{   
    HKEY hKey;   
    char szSubKey[DEF_REGKEY_SIZE] = {0x00,};   
  
    strncpy_s( szSubKey, _countof(szSubKey), strSubKey, strSubKey.GetLength() );   
  
    if(::RegCreateKey(key, szSubKey, &hKey) != ERROR_SUCCESS){   
            TRACE("레지스트리에 키를 생성하지 못하였습니다.\n");   
        return FALSE;   
    }   
    return TRUE;   
} 

 

//레지스트리 값 삭제  

int DeleteRegValue(HKEY key, CString strSubKey, CString strValName)   
{   
 HKEY hKey = NULL;
 BOOL bRet = FALSE;
    char szSubKey[DEF_REGKEY_SIZE] = {0x00,};   
 char szValName[DEF_REGKEY_SIZE] = {0x00,};   
    strncpy_s( szSubKey, _countof(szSubKey), strSubKey, strSubKey.GetLength() ); 
    strncpy_s( szValName, _countof(szValName), strValName, strValName.GetLength() );   
  
 
 LONG lRet = ::RegOpenKey( key, szSubKey, &hKey );
 if( lRet == ERROR_SUCCESS ){
  if(::RegDeleteValue(hKey, szValName) != ERROR_SUCCESS)
   TRACE("레지스트리에 값을 삭제하지 못하였습니다.");   
  else
   bRet = TRUE;
  ::RegCloseKey(hKey);
 }
 else
  TRACE("레지스트리에 키를 열지 못하였습니다.");
    return bRet;   
} 

 

//레지스트리 키 삭제  

int DeleteRegKey(HKEY key, CString strSubKey)   
{   
    char szSubKey[DEF_REGKEY_SIZE] = {0x00,};   
    strncpy_s( szSubKey, _countof(szSubKey), strSubKey, strSubKey.GetLength() );   
  
    if(::RegDeleteKey(key, szSubKey) != ERROR_SUCCESS){   
        TRACE("레지스트리에 키를 생성하지 못하였습니다.");   
        return FALSE;   
    }   
    return TRUE;   
}  

 

//레지스트리 값 읽기

int ReadReg(HKEY key, CString strSubKey, CString strKey, CString &strVal)   
{   
    HKEY    hKey;   
    char szSubKey[DEF_REGKEY_SIZE] = {0x00,};   
    char    szKey  [DEF_REGKEY_SIZE] = {0x00,};    
    char    szData [DEF_REGDATA_SIZE] = {0x00,};    
    DWORD   dwSize = sizeof(szData);   
  
    strncpy_s( szSubKey, _countof(szSubKey), strSubKey, strSubKey.GetLength() );   
    strncpy_s( szKey, _countof(szKey), strKey, strKey.GetLength() );   
  
    // if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Reginfo\\Config", 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS){   
    if( RegOpenKeyEx(key, szSubKey, 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS){   
            TRACE("레지스트리 키 오픈 실패");   
        return FALSE;   
    }   
  
    if( RegQueryValueEx(hKey, szKey, 0, NULL, (LPBYTE)szData, &dwSize) != ERROR_SUCCESS ){   
            TRACE("레지스트리 값 읽기 실패");   
         return FALSE;   
    }   
  
    strVal = szData;   
    RegCloseKey( hKey );   
  
    return TRUE;   
}  

 

 

//레지스트리 값쓰기  

int WriteReg(HKEY key, CString strSubKey, CString strKey, CString strVal, DWORD dwType)   
{   
    HKEY hKey;   
    char szSubKey[DEF_REGKEY_SIZE] = {0x00,};   
    char    szKey  [DEF_REGKEY_SIZE] = {0x00,};   
    char    szData [DEF_REGDATA_SIZE] = {0x00,};    
    DWORD   dwData = strVal.GetLength();   
  
    strncpy_s( szSubKey, _countof(szSubKey), strSubKey, strSubKey.GetLength() );   
    strncpy_s( szKey,  _countof(szKey),  strKey, strKey.GetLength() );   
    strncpy_s( szData, _countof(szData), strVal, strVal.GetLength() );   
  
    // if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Reginfo\\Config", 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS){   
    if(RegOpenKeyEx(key, szSubKey, 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS){   
            TRACE("레지스트리 키 오픈 실패");   
        return FALSE;   
    }   
  
    if(RegSetValueEx (hKey, szKey, 0, dwType, (CONST BYTE*)(LPCTSTR)szData, dwData + 1) != ERROR_SUCCESS){   
            TRACE("레지스트리 값 쓰기 실패");   
        return FALSE;   
    }   
    return TRUE;   
} 

 

 

728x90
반응형

'프로그래밍 > MFC' 카테고리의 다른 글

MFC 문자열 Format  (0) 2020.11.02
MFC CString 함수  (0) 2020.11.02
MFC 비트맵 이미지  (0) 2020.11.02
MFC 그리기 모드  (0) 2020.11.02
MFC 현재 사용중인 IP 가져오기  (0) 2020.11.02