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배를 넘겨줘야 한다.
안그러면 짤림... ㅠ