[C/C++] 레지스트리(Registry - regedit)의 값을 가져오기 - RegOpenKeyEx, RegQueryValueEx
I.T/Programming 2011. 8. 26. 17:22레지스트리는 시작실행에서 "regedit"를 입력하여 창을 띄워
여러 레지의 값을 확인해볼 수 있다.(검색도 가능)
문제는 주로 Path부분에서 Registry에 등록된 값을 가져오는 경우가 있다.
예제가 빠르니 보자.
필자의 예제는 어떤PC에서든 ProgramFiles의 Path를 가져오기위 한 예제다.
보시다시피 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion에
ProgramFilesDir 라는 애가 프로그램파일즈의 Path를 가지고있다.
이것을 빼올 것이다.
TCHAR szDefaultPath[_MAX_PATH] = {0};
DWORD dwBufLen = MAX_PATH;
RegOpenKeyEx( HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion", 0, KEY_READ, &hKey );
RegQueryValueEx(hKey, "ProgramFilesDir", NULL, NULL,(LPBYTE)szDefaultPath, &dwBufLen);
RegCloseKey(hKey);
m_strBaseFindDir = CString(szDefaultPath) + CString("/NPKI/");
m_strBaseFindPath = CString(szDefaultPath) + CString("/NPKI/*.*");
TCHAR szDefaultPath[_MAX_PATH] = {0};
DWORD dwBufLen = MAX_PATH;
RegOpenKeyEx( HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion", 0, KEY_READ, &hKey );
RegQueryValueEx(hKey, "ProgramFilesDir", NULL, NULL,(LPBYTE)szDefaultPath, &dwBufLen);
RegCloseKey(hKey);
m_strBaseFindDir = CString(szDefaultPath) + CString("/NPKI/");
m_strBaseFindPath = CString(szDefaultPath) + CString("/NPKI/*.*");
HKEY, TCHAR, DWORD 를 선언하자. (필요한 파라미터의 타입)
RegOpenKeyEx(), hkey로 우선 레지의 path를 잡아주고,
RegQueryValueEx()로 open한 hkey로 레지의 실제 이름을 적어주고 받아오면 된다.
RegCloseKey()로 마무리.
아래 두줄은 CString()해서 값을 쓰는 모습이다.
환경변수를 아시는가? %USERPROFILE%과 같은 변수,
%USERPROFILE%을 실행에서 치면 해당폴더가 열리는데..
이 환경변수는 레지스트리 값과 달라서, 해당윈도우계정에 따라서 각 PC마다 PATH가 FIX가 아니다.
이 환경변수 값과 레지의 값이 동일한 것들도 있지만, 사용하는 방법은 틀리다.
필요하다면 아래글을 참고하길 바란당.
2011/08/26 - [I.T/Programming] - [C/C++] 환경변수(%USERPROFILE%)의 값, Path을 읽어오기, Get %USERPROFILE% Path, GetEnvironmentVariable