1. 레지스트리 추가
레지스트리 추가 부분에서는 위에 루트에..
abc라는 이름과 "c:winntsystem32
otepad.exe"의 데이터를 갖는것을 추가하는 예제 코드.
LONG lResult;
char buffer[100];
HKEY hKey;
DWORD dwDesc;
char *path = "c:winntsystem32
otepad.exe"; // 노트 패드 경로
// 레지스트리 열고
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWAREMicrosoftWindowsCurrentVersionRun",
0, KEY_ALL_ACCESS, &hKey);
// Set Registry Key & Value
lResult = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWAREMicrosoftWindowsCurrentVersionRun",
0, buffer, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKey, &dwDesc);
if(lResult == ERROR_SUCCESS)
{
RegSetValueEx(hKey, "abc", 0, REG_SZ, (BYTE*)path, strlen(path));
}
//레지스트리 닫고
RegCloseKey(hKey);
2. 레지스트리 삭제
LONG lResult;
HKEY hKey;
DWORD dwBytes=100;
CString str = "abc";
// open Regstry Key
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWAREMicrosoftWindowsCurrentVersionRun",
0, KEY_ALL_ACCESS, &hKey);
if(lResult != ERROR_SUCCESS)
{
AfxMessageBox("Register Open Error");
}
lResult = RegDeleteValue(hKey, str); // 삭제
if (lResult == ERROR_SUCCESS)
AfxMessageBox("레지스터 삭제 성공");
else
AfxMessageBox("실패당...ㅠㅠ");
RegCloseKey(hKey);
3. 레지스트리 읽기
LONG lResult;
HKEY hKey;
DWORD dwType;
DWORD dwBytes=100;
char buffer[100];
// open Regstry Key
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWAREMicrosoftWindowsCurrentVersionRun",
0, KEY_ALL_ACCESS, &hKey);
if(lResult != ERROR_SUCCESS)
{
AfxMessageBox("Register Open Error");
}
// Read Regstry Key
lResult=RegQueryValueEx(hKey, "abc", 0, &dwType, (LPBYTE)buffer, &dwBytes);
if(lResult == ERROR_SUCCESS)
AfxMessageBox(buffer);
else
AfxMessageBox("Register Read Error");
RegCloseKey(hKey);
4. 서브 키까지 삭제 (recursive)
void SimpleApp::DeleteRegKey()
{
HKEY m_hKey = NULL;
char svSubKeyBuf[MAX_PATH+1];
long m_RetValue = ::RegOpenKeyEx(HKEY_CURRENT_USER,
"SoftwareTest",0,KEY_ALL_ACCESS,&m_hKey);
if(m_RetValue == ERROR_SUCCESS) // 오픈 성공하면...
{
RegDeleteKeyRecurse(
HKEY_CURRENT_USER, _T("SoftwareTest"), svSubKeyBuf);
}
return;
}
int SimpleApp::RegDeleteKeyRecurse(HKEY hKey, LPCTSTR lpSubKey,
char *svKeyBuf)
{
int nCount=0;
char svSubKeyBuf[MAX_PATH+1];
HKEY hSubKey;
if(RegOpenKeyEx(hKey,lpSubKey,0,KEY_ALL_ACCESS,&hSubKey)
!=ERROR_SUCCESS) {
return -1;
}
while(RegEnumKey(hSubKey,nCount,svKeyBuf,MAX_PATH)
!=ERROR_NO_MORE_ITEMS) {
if(RegDeleteKeyRecurse(hSubKey,svKeyBuf,svSubKeyBuf)==-1) {
RegCloseKey(hSubKey);
return 1;
}
nCount++;
}
RegCloseKey(hSubKey);
RegDeleteKey(hKey,lpSubKey);
return 0;
}
nCount++; 은 필요 없습니다.
RegEnumKey 실행마다 알아서 돕니다.