본문 바로가기
Study/API

레지스터 데이터 입력 및 삭제...

by 뿡뿡대마왕 2011. 9. 28.
반응형

레지스터를 입력 하고 삭제해야 하는 일이 빈번하게 생겼다..;;

클래스를 하나 만들어서 인자만 넣어주면 자동 셋팅하게끔 만들어야 하고 함수를 찾아보던중..

누가 깔끔하게..내가 할일을 먼저 해놓았다....앗싸! ..ㅋㅋ

출처 : http://blog.naver.com/qodwlql/140124437707
 

레지스트리 등록
BOOL SHRegWriteString(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, LPCTSTR lpData)
{
   HKEY key;
  

   if (RegCreateKeyEx(  // 레지스트리키를 새로 만들어주는 함수이다. 만약 생성하려는 키가 존재하는 경우 해당 키를 오픈.

                              hKey,  // 생성할 키의 루트키

                              lpKey, // 생성할 서브키(문자열)

                              0, // 반드시 0

                              NULL, // 키의 지정된 클래스명(문자열), (보통 NULL 입력)

                              REG_OPTION_NON_VOLATILE,  // 정보를 파일에 기록한다. ( 보통 이 옵션을 사용 ), REG_OPTION_VOLATILE - 정보를 메모리에 기록합니다. ( 시스템종료시 기록이 지워진다. )


                              KEY_WRITE,  // 쓰기와 관련된 모든 권한, KEY_ALL_ACCESS - 모든 권한, KEY_READ - 읽기와 관련된 모든 권한, KEY_EXECUTE - KEY_READ와 동일

                              NULL, // SECURITY_ATTRIBUTES 구조체의 포인터. (보통 NULL 입력)


                              &key,  // 생성된 키의 핸들포인터

                              NULL // DWORD의 포인터, 생성된 키의 상태, (보통 NULL 입력)

                              )!=ERROR_SUCCESS)  // 성공시 ERROR_SUCCESS, 실패시 0이 아닌값이 리턴됨

      return FALSE;


   if (RegSetValueEx( // 레지스트리키를 저장 하는 함수

                            key,  // RegCreateKeyEx에서 얻은 핸들값

                            lpValue, // 값 이름

                            0, // 반드시 0

                            REG_SZ, //문자열 데이타 타입

                            (LPBYTE)lpData, // 값 데이터

                            lstrlen(lpData)+1 //값의 타입이(REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ) 일 경우 문자열의 크기

                            )!=ERROR_SUCCESS)  // 성공시 ERROR_SUCCESS, 실패시 0이 아닌값이 리턴됨
      return FALSE;
  

   RegCloseKey(key); // RegCreateKeyEx에서 얻은 핸들을 닫는 함수
   return TRUE;
}

ROOT KEY
HKEY_CLASSES_ROOT - 윈도우에 사용하는 프로그램과 각 프로그램에 연결된 확장명에 대한 정보, 단축키, 드래그 앤 드롭, 윈도우의 OLE에 관련된 정보가 저장
HKEY_CURRENT_USER - 사용자가 설정한 윈도우 환경에 대한 정보가 저장
HKEY_LOCAL_MACHINE - 컴퓨터에 설치된 하드웨어와 소프트웨어에 관련된 모든 설정 내용이 저장. 특히 하드웨어와 하드웨어를 구동시키는 드라이버와 설정 사항에 대한 정보가 저장
HKEY_USERS - HKEY_CURRENT_USER 에 저장된 정보 전체와 데스크탑 설정, 네트워크 연결등의 정보가 저장
HKEY_CURRENT_CONFIG - HKEY_LOCAL_MACHINE 키의 하위키인 Config 키의 내용만 담고 있슴.

데이터 형식 
문자열 값(REG_SG) - 문자열 값을 가지는 데이터 형식
이진 값(REG_BINARY) - 0과1로 표현되는 2진수 값을 가지는 데이터 형식
DWORD 값(REG_DWORD) - DWORD는 더블워드(Double Word)를  의미하는 것
다중 문자열 값(REG_MULTI_SZ) - 여러 유니코드 문자열의 묶음
확장 가능한 문자열 값(REG_EXPAND_SZ) - 윈도우 XP는 여러 개의 시스템 정의 변수를 사용한다. 이러한 변수들은 BAT 파일이나 제어판의 ‘시스템’ 환경 변수에서 설정
 

레지스트리 삭제
BOOL SHRegDelValue(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue)
{
    HKEY Key;
    LONG lRet = 0;
 
    if(RegOpenKey(  // 레지스트리를 오픈하는 함수

                      hKey,  // 생성할 키의 루트키

                      lpKey, // 생성할 서브키(문자열)

                      &Key  // 생성된 키의 핸들포인터

                      ) != ERROR_SUCCESS)  // 성공시 ERROR_SUCCESS, 실패시 0이 아닌값이 리턴됨
        return FALSE;
 
    lRet = RegDeleteValue( // 레지스트리를 삭제하는 함수

                                key,  // RegOpenKey에서 얻은 핸들값

                                lpValue, // 값 이름

                                );
  

   RegCloseKey(key); // RegCreateKeyEx에서 얻은 핸들을 닫는 함수
    return ((lRet == ERROR_SUCCESS)? TRUE : FALSE);  // 성공시 ERROR_SUCCESS, 실패시 0이 아닌값이 리턴됨
}

 

윈도우 시작에 등록 및 삭제

ex>

#include <windows.h>

// 등록

SHRegWriteString(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run","ProgramName", szPath);

// 삭제

SHRegDelValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run","ProgramName");

=========================================================================================================

레지스트리 등록

TCHAR value[1028]  = "C:\\Program Files\\abc\\abc.exe -as";

HKEY hk;
 

RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\windows\\CurrentVersion\\Run", &hk));

 
RegSetValueEx(hk, "abc", 0, REG_SZ, (LPBYTE) value, strlen(value)+1);

 
RegCloseKey(hk);


=========================================================================================================

레지스트리 삭제

HKEY key;

RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS,&key);


RegDeleteValue(key, "abc") ;


RegCloseKey( key );

=========================================================================================================

레지스트리 데이터 구하기

  

HKEY hhkey;
    TCHAR str1[4 + 1];
  DWORD data_size1 = sizeof(str);
  RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM",0, KEY_ALL_ACCESS, &hhkey);
  int ret = RegQueryValueEx(hkey, "\\Device\\Silabser0", 0, NULL, (LPBYTE)str, &data_size1);
  AfxMessageBox(str);

 


반응형

댓글