레지스트리 함수 사용시 winreg.h을 인클루드하고, advapi32.lib을 Library에 등록해야 된다. 대부분 windows.h에 포함되어 있다.

레지스트리 등록
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);

'Program Visual C++' 카테고리의 다른 글

ActiveX 권한2  (0) 2012.04.18
ActiveX 권한..1  (0) 2012.01.12
MFC CInternetSession클래스 사용시_유의점  (0) 2011.12.01
AVI 파일 다루기  (0) 2011.08.30
정적 라이브러리에서 MFC 사용  (0) 2011.08.25