Contents

조회 수 15357 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
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;
}



?
  • ?
    kyle 2015.09.14 19:23
    4. 서브 키까지 삭제 (recursive) 에서
    nCount++; 은 필요 없습니다.
    RegEnumKey 실행마다 알아서 돕니다.
  • profile
    hooni 2015.09.15 20:01

    댓글 감사합니다.
    근데, nCount가 포인터도 아니고 해서 RegEnumKey 에서 증가시킬 방법이 없을텐데요.
    그리고 MSDN에 보면 프로그램에서 증가시키라고 나와있습니다.

    RegEnumKey(hKey, dwIndex, lpName, cchName);
    The application should then increment the dwIndex parameter...

    [참고] https://msdn.microsoft.com/en-us/us/windows/apps/ms724861


  1. '2014 모바일 개발 트렌드' 발표자료입니다.

  2. Aspect Oriented Programming in Objective-C

  3. DDay Memo 1.9.4 소스코드

  4. GCM 사용하기 2 (단말에 GCM 구현하기)

  5. GCM 사용하기 3 (JSP로 GCM 푸시 서버 만들기)

  6. git 브런치 배우기 (링크)

  7. GPL, AGPL, MPL,.. 한눈에 보는 오픈소스SW 라이선스

  8. How to Test SMTP AUTH using Telnet

  9. JSON, BSON 변환

  10. Laravel 5 Failed opening required bootstrap/../vendor/autoload.php

  11. Mac OS 에 Jenkins 설치하기 (Homebrew)

  12. macOS에 node, npm 설치하기 (homebrew)

Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 71 Next
/ 71