레지스터를 입력 하고 삭제해야 하는 일이 빈번하게 생겼다..;;
클래스를 하나 만들어서 인자만 넣어주면 자동 셋팅하게끔 만들어야 하고 함수를 찾아보던중..
누가 깔끔하게..내가 할일을 먼저 해놓았다....앗싸! ..ㅋㅋ
출처 : 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);
'Study > API' 카테고리의 다른 글
윈도우 64비트 구분 방법 (c, c++, api) 64비트 구분 함수 (0) | 2011.12.07 |
---|---|
익스플로러 열어본 페이지 목록 삭제 및 열어본 페이지 목록의 갯수 세기 !! (0) | 2011.09.28 |
바탕화면 새로고침~~ F5 함수!~ (0) | 2011.09.28 |
폴더 복사 방법 (0) | 2011.09.28 |
SHGetSpecialFolderPath를 이용하여 특수 경로를 구하기 (0) | 2011.09.28 |
댓글