//------------------------------------------------------------------------------
// $Workfile: RegistryEx.h $
// $Header: /DevNet/SbjCore/SbjCore/Sys/RegistryEx.h 1 4/02/07 4:56p Steve $
//
// Copyright � 2006 Tartus, Inc.
// All rights reserved.
//
// The information contained herein is confidential, proprietary to
// Tartus, Inc., and considered a trade secret as defined
// in section 499C of the penal code of the State of California. Use
// of this information by anyone other than authorized employees of
// Tartus, Inc. is granted only under a written non-disclosure
// agreement, which expressly prescribes the scope and manner of such
// use.
//
// *** Authors ***
// Neal O'Hara
// John La Porta
// Zhimin Lin
// Andreas Christmann
// Steve Johnson
// Frankie Jefferson
// Tartus, Inc.
//
// $Revision: 1 $
//
//-----------------------------------------------------------------------------
#pragma once
#include "Registry.h"
#include <sstream>
#include <locale>
namespace SbjCore
{
namespace Sys
{
/** yet another registry wrapper class. In this case it wraps Registry, the cloned SECRegistry class.
*/
class AFX_EXT_CLASS RegistryEx : public Registry
{
public:
/// ctor
RegistryEx( HKEY hKeyToOpen = HKEY_CURRENT_USER,
LPCTSTR lpszSubKey = NULL,
LPCTSTR lpszComputerName = NULL);
/// dtor
virtual ~RegistryEx();
typedef std::basic_stringstream<TCHAR> t_stringstream;
typedef std::pair<CString, CString> t_RegValuesPair;
typedef std::map<CString, CString> t_RegValuesMap;
/// forces all values to save as strings
template <class T>
void SetRegistryValue(
LPCTSTR pEntry,
const T& rValue)
{
t_stringstream theStream;
(void) theStream.imbue(std::locale::classic());
theStream << rValue;
VERIFY(SetRegValue(pEntry, theStream.str().c_str()));
}
/// reads from registry into template type T
template <class T>
void GetRegistryValue(
LPCTSTR pEntry,
T& rValue,
const T& rDefault)
{
CString strValue;
if (GetRegValue(pEntry, strValue))
{
LPCTSTR pBuffer = strValue;
t_stringstream theStream(pBuffer);
(void) theStream.imbue(std::locale::classic());
theStream >> rValue;
}
else
{
rValue = rDefault;
}
}
bool GetRegValue(LPCTSTR lpszValue, CString& sData, const LPCTSTR lpszDefault = NULL);
bool GetRegValue(LPCTSTR lpszValue, DWORD& dwData, const DWORD dwDefault = -1);
bool SetRegValue(LPCTSTR lpszValue, LPCTSTR lpszData);
bool SetRegValue(LPCTSTR lpszValue, const DWORD dwData);
HKEY CreateKey(HKEY hKey, LPCTSTR lpszKey);
HKEY OpenKey(HKEY hKey, LPCTSTR lpszKey);
void CloseKey(HKEY& hKey);
/// not sure what this is, ask LaPorta
bool FindAndCreate(LPCTSTR lpszKey, LPCTSTR lpszValue, LPCTSTR lpszFileExt, LPCTSTR lpszExtType);
// fills values with current key's item/value pairs and returns count
int EnumerateRegValues(t_RegValuesMap& values);
};
}
}
//*** Modification History ***
// $Log: /DevNet/SbjCore/SbjCore/Sys/RegistryEx.h $
//
// 1 4/02/07 4:56p Steve
//
// 3 11/21/06 2:24p Steve
//
// 2 4/24/06 3:32p Steve