//+------------------------------------------------------------------------- // // Copyright (C) Silicon Prairie Software, 1996 // // File: simreg.h // // Contents: CRegFile // // Simple Win32/Win16 registry manipulation class // Copyright (c)1996, Shaun Ivory // All rights reserved // Used with permission // // History: Sep-26-96 Davepl Created // //-------------------------------------------------------------------------- #pragma once #include "shtl.h" #include "tstring.h" #include #if defined(WIN32) || defined(_WIN32) #define SIMREG_WIN32 #else #define SIMREG_WIN16 #endif #define INVALID_HKEY ((HKEY)-1) class CSimpleReg { private: tstring m_SubKeyName; HKEY m_hKeyRoot; HKEY m_hSubKey; unsigned char m_bOpenSuccess; unsigned char m_bCreate; #if defined(SIMREG_WIN32) LPSECURITY_ATTRIBUTES m_lpsaSecurityAttributes; #endif private: // Some of the Reg... functions inexplicably require non const strings static LPTSTR Totstring( const tstring &s ) { return (LPTSTR)(LPCTSTR)s; } unsigned char Assign( const CSimpleReg &other ); public: enum { PreOrder=0, PostOrder=1 }; struct CKeyEnumInfo { tstring Name; HKEY Root; int Level; void *ExtraData; }; struct CValueEnumInfo { tstring Name; DWORD Type; DWORD Size; void *ExtraData; }; typedef int (*SimRegKeyEnumProc)( CKeyEnumInfo &enumInfo ); typedef int (*SimRegValueEnumProc)( CValueEnumInfo &enumInfo ); // Constructors, destructor #if defined(SIMREG_WIN32) CSimpleReg( HKEY, const tstring&, unsigned char forceCreate=0, LPSECURITY_ATTRIBUTES lpsa=NULL ); #else CSimpleReg( HKEY, const tstring&, unsigned char forceCreate=0 ); #endif CSimpleReg(void); CSimpleReg(const CSimpleReg &other); ~CSimpleReg(void); CSimpleReg &operator=(const CSimpleReg& ); // Query functions unsigned long Size( const tstring &key ); unsigned long Type( const tstring &key ); unsigned char Query( const tstring &key, LPTSTR szValue, unsigned short maxLen ); unsigned char Query( const tstring &key, tstring &value, unsigned short maxLen=0 ); unsigned char Query( const tstring &key, DWORD &value ); unsigned char Query( const tstring &key, int &value ); unsigned char Query( const tstring &key, LONG &value ); unsigned char Query( const tstring &key, BYTE &value ); unsigned char Query( const tstring &key, WORD &value ); unsigned char QueryBin( const tstring &key, void *value, DWORD size ); void Query( const tstring &key, DWORD &value, const DWORD &defaultvalue ); template _TYPE Query( const tstring &key, const _TYPE &defaultvalue ) { _TYPE result; if (Query(key, result)) return result; else return defaultvalue; } // Set functions unsigned char SetBin( const tstring &key, void *value, DWORD size ); unsigned char Set( const tstring &key, const tstring &value ); unsigned char Set( const tstring &key, DWORD value ); unsigned char Open(void); unsigned char Close(void); unsigned char ForceCreate( unsigned char create = TRUE ); unsigned char SetRoot( HKEY keyClass, const tstring &newRoot ); #if defined(SIMREG_WIN32) void SecurityAttributes( const LPSECURITY_ATTRIBUTES lpsa ) { m_lpsaSecurityAttributes = lpsa; } const LPSECURITY_ATTRIBUTES SecurityAttributes(void) const { return m_lpsaSecurityAttributes; } #endif DWORD CountKeys(void); static HKEY GetHkeyFromName( const tstring &Name ); static unsigned char Delete( HKEY, const tstring &key ); static int DeleteRecursively( HKEY root, const tstring &name ); // Inlines tstring SubKeyName(void) const {return (m_SubKeyName);} unsigned char ForceCreate(void) const {return (m_bCreate);} unsigned char OK(void) const {return (m_bOpenSuccess);} HKEY GetRootKey(void) const {return (m_hKeyRoot);} HKEY GetSubKey(void) const {return (m_hSubKey);} int operator!(void) const {return (!m_bOpenSuccess);} static HKEY GetWin16HKey( HKEY key ); int EnumValues( SimRegValueEnumProc enumProc, void *extraInfo = NULL ); int RecurseKeys( SimRegKeyEnumProc enumProc, void *extraInfo = NULL, int recurseOrder = CSimpleReg::PostOrder, int failOnOpenError = 1 ); int EnumKeys( SimRegKeyEnumProc enumProc, void *extraInfo = NULL, int failOnOpenError = 1 ); private: static int DoRecurseKeys( HKEY key, const tstring &root, SimRegKeyEnumProc enumProc, void *extraInfo, int level, int recurseOrder, int failOnOpenError ); static int DoEnumKeys( HKEY key, const tstring &root, SimRegKeyEnumProc enumProc, void *extraInfo, int failOnOpenError ); static int DeleteEnumKeyProc( CSimpleReg::CKeyEnumInfo &enumInfo ); };