Registry Operations with ATL class: Notes Code
#include <atlbase.h> // for CRegKey
class CRegistry
{
public:
CRegistry()
{
m_RegKey.m_hKey = HKEY_CURRENT_USER;
}
CRegKey m_RegKey;
BOOL OpenKey( LPCTSTR lpszKeyName );
BOOL CreateKey( LPCTSTR lpszKeyName );
BOOL ReadBoolean( BOOL& bValue, LPCTSTR lpszValueName );
BOOL ReadString( LPTSTR szValue, LPCTSTR lpszValueName );
BOOL ReadInteger( DWORD& dwValue, LPCTSTR lpszValueName );
BOOL ReadFloat( FLOAT& fValue, LPCTSTR lpszValueName );
BOOL WriteBoolean( BOOL bValue, LPCTSTR lpszValueName );
BOOL WriteString( LPCTSTR lpszValue, LPCTSTR lpszValueName );
BOOL WriteInteger( DWORD dwValue, LPCTSTR lpszValueName );
BOOL WriteFloat( FLOAT fValue, LPCTSTR lpszValueName );
BOOL DeleteThisKey( LPCTSTR lpszSubKey );
BOOL DeleteKeyAndAllSubKeys( LPCTSTR lpszKey );
BOOL CloseKey();
};
BOOL CRegistry::OpenKey( LPCTSTR lpszKeyName )
{
HKEY hKeyParent = m_RegKey.m_hKey;
LONG lResult = m_RegKey.Open( hKeyParent,
lpszKeyName,
KEY_ALL_ACCESS );
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::CreateKey( LPCTSTR lpszKeyName )
{
HKEY hKeyParent = m_RegKey.m_hKey;
LONG lResult = m_RegKey.Create( hKeyParent,
lpszKeyName,
REG_NONE,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
NULL );
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::DeleteThisKey( LPCTSTR lpszSubKey )
{
LONG lResult = m_RegKey.DeleteSubKey( lpszSubKey );
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::DeleteKeyAndAllSubKeys( LPCTSTR lpszKey )
{
LONG lResult = m_RegKey.RecurseDeleteKey( lpszKey );
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::ReadBoolean( BOOL& bValue, LPCTSTR lpszValueName )
{
DWORD dwValue = bValue;
LONG lResult = m_RegKey.QueryValue( dwValue, lpszValueName );
if ( lResult == ERROR_SUCCESS )
{
if ( dwValue == 1 )
{
bValue = TRUE;
}
else
{
bValue = FALSE;
}
return TRUE;
}
return FALSE;
}
BOOL CRegistry::ReadString( LPTSTR szValue, LPCTSTR lpszValueName )
{
DWORD dwCount = 20; //sizeof(DWORD );
LONG lResult = m_RegKey.QueryValue( szValue,
lpszValueName,
&dwCount );
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::ReadInteger( DWORD& dwValue, LPCTSTR lpszValueName )
{
LONG lResult = m_RegKey.QueryValue( dwValue, lpszValueName );
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::ReadFloat( FLOAT& fValue, LPCTSTR lpszValueName )
{
char szValueData[20];
DWORD dwCount = 20; //sizeof(DWORD );
LONG lResult = m_RegKey.QueryValue( szValueData, lpszValueName, &dwCount );
fValue = (float) atof ( szValueData );
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::WriteBoolean( BOOL bValue, LPCTSTR lpszValueName )
{
DWORD dwValue;
if( bValue )
{
dwValue = 1;
}
else
{
dwValue = 0;
}
LONG lResult = m_RegKey.SetValue( dwValue, lpszValueName );;
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::WriteString( LPCTSTR lpszValue, LPCTSTR lpszValueName )
{
DWORD dwCount = 20; //sizeof(DWORD );
LONG lResult = m_RegKey.SetValue( lpszValue, lpszValueName );
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::WriteInteger( DWORD dwValue, LPCTSTR lpszValueName )
{
LONG lResult = m_RegKey.SetValue( dwValue, lpszValueName );;
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::WriteFloat( FLOAT fValue, LPCTSTR lpszValueName )
{
char szValueData[20];
sprintf( szValueData,"%.3f", fValue );
LONG lResult = m_RegKey.SetValue( szValueData, lpszValueName );
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
BOOL CRegistry::CloseKey()
{
LONG lResult = m_RegKey.Close();
if ( lResult == ERROR_SUCCESS )
{
return TRUE;
}
return FALSE;
}
(c) 2001, Stan Malevanny