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 |