반응형

CString OutlookManager::GetContactCategoryForVer2003() { CString tempCategory = _T(""); //if(_ContactCategory.IsEmpty()) //{ //Get Data, Reg.Category Data to CString HKEY hKey; LONG lResult = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Office\\11.0\\Outlook\\Categories", 0, KEY_READ, &hKey); if (lResult == ERROR_SUCCESS) { DWORD buf_size = 0; if (RegQueryValueEx(hKey, L"MasterList", NULL, NULL, NULL, &buf_size) == ERROR_SUCCESS){ TCHAR *pBuf = new TCHAR[buf_size + 1]; if(RegQueryValueEx(hKey, L"MasterList", NULL, NULL, (LPBYTE)pBuf, &buf_size) == ERROR_SUCCESS) { pBuf[buf_size] = _T('\0'); tempCategory = CString(pBuf); } delete[] pBuf; pBuf = NULL; } } RegCloseKey(hKey); return _ContactCategory = tempCategory; //}else{ // return _ContactCategory; //} } void OutlookManager::SetContactCategoryForVer2003(CString value) { //Get Data, Reg.Category Data to CString HKEY hKey; LONG lResult = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Office\\11.0\\Outlook\\Categories", 0, KEY_WRITE, &hKey); if (lResult == ERROR_SUCCESS) { //Set TCHAR *pBuf = NULL; pBuf = (TCHAR*)(LPCTSTR)value; DWORD size = (_tcslen(pBuf) + 1) * 2; lResult = RegSetValueEx(hKey, L"MasterList", 0, REG_BINARY, (LPBYTE)pBuf, size); } RegCloseKey(hKey); }

 

Get하는 함수와 Set하는 함수의 예이다.

바이너리 값인 MasterList의 값을 얻어오고, Set하는 부분이며, 위치는 CURRENTUSER .. 이하에 있다.

1. Get
RegOpenKeyEx를하는데, KEY_READ 모드로 해도 무방.
먼저 buf size만 셋팅하여 RegQueryValueEx 호출하고, 
길이를 알아낸 뒤, 그 버프로 동적 배열을 TCHAR로 만들어서 다시한번 RegQueryValueEx 수행

2. Set
Get과 다르게 수정이 들어가므로 RegOpenKeyEx 할 때, KEY_WRITE 나 KEY_ALL_ACCESS 로 설정 해야한다.
또한 이때 CString to TCHAR 하여, size를 넣는 부분을 보면, TCHAR의 길이 +1에 2배를 넘겨줘야 한다.
안그러면 짤림... ㅠ

반응형
Posted by Rainfly
l