RegKeyEx.h. #1

  • //
  • guest/
  • YourUncleBob/
  • p4win/
  • main/
  • common/
  • RegKeyEx.h.
  • View
  • Commits
  • Open Download .zip Download (4 KB)
#include <atlbase.h>

class CRegKeyEx : public CRegKey
{
public:
    // unhide versions of Create and Open from CRegKey that take strings
    using CRegKey::Create;
    using CRegKey::Open;

    LONG Open(HKEY hKeyParent, UINT nKeyNameID,
		REGSAM samDesired = KEY_ALL_ACCESS)
    {
        CString keyName;
        if(keyName.LoadString(nKeyNameID))
            return CRegKey::Open(hKeyParent, keyName, samDesired);
        else
            return 2;
    }
    
    LONG Create(HKEY hKeyParent, UINT nKeyNameID, LPTSTR lpszClass = REG_NONE, 
        DWORD dwOptions = REG_OPTION_NON_VOLATILE, 
        REGSAM samDesired = KEY_ALL_ACCESS, LPSECURITY_ATTRIBUTES lpSecAttr = NULL, 
        LPDWORD lpdwDisposition = NULL)
    {
        CString keyName;
        if(keyName.LoadString(nKeyNameID))
            return CRegKey::Create(hKeyParent, keyName, lpszClass, dwOptions, samDesired, lpSecAttr, lpdwDisposition);
        else
            return 2;
    }
    
    CString QueryValueString(LPCTSTR valueName, LPCTSTR defaultValue = _T(""), LONG *pSuccess = NULL)
    {
        ASSERT(valueName);
        ASSERT(defaultValue);

        CString result = defaultValue;
        DWORD bufLen = 0;
#if _MSC_VER >= 1300
        DWORD type;
        LONG success = CRegKey::QueryValue(valueName, &type, 0, &bufLen);
        if(ERROR_SUCCESS == success && type == REG_SZ)
#else
        LONG success = CRegKey::QueryValue(0, valueName, &bufLen);
        if(ERROR_SUCCESS == success)
#endif
        {
            CString value;
#if _MSC_VER >= 1300
            LONG success = CRegKey::QueryStringValue(valueName, value.GetBufferSetLength(bufLen/sizeof(TCHAR)-1), &bufLen);
#else
            LONG success = CRegKey::QueryValue(value.GetBufferSetLength(bufLen/sizeof(TCHAR)-1), valueName, &bufLen);
#endif
            if(pSuccess)
                *pSuccess = success;
            if(ERROR_SUCCESS == success)
                result = value;
        }
        else
        {
            if(pSuccess)
                *pSuccess = success;
        }
        return result;
    }
    
    CString QueryValueString(UINT nValueNameID, LPCTSTR defaultValue = _T(""), LONG *pSuccess = NULL)
    {
        CString valueName;
        if(valueName.LoadString(nValueNameID))
        {
            return QueryValueString(valueName, defaultValue, pSuccess);
        }
        else
        {
            // couldn't find string for value name in stringtable
            if(pSuccess)
                *pSuccess = 2;
            return defaultValue;
        }
    }

    LONG SetValueString(LPCTSTR value, LPCTSTR valueName)
    {
#if _MSC_VER >= 1300
        return SetStringValue(valueName, value);
#else
        return SetValue(value, valueName);
#endif
    }
    
    LONG SetValueString(LPCTSTR value, UINT nValueNameID)
    {
        CString valueName;
        if(valueName.LoadString(nValueNameID))
        {
            return SetValueString(value, valueName);
        }
        else
        {
            // couldn't find string for value name in stringtable
            return 2;
        }
    }

    DWORD QueryValueLong(LPCTSTR valueName, DWORD defaultValue = 0, LONG *pSuccess = NULL)
    {
        DWORD result = defaultValue;
#if _MSC_VER >= 1300
        LONG success = CRegKey::QueryDWORDValue(valueName, result);
#else
        LONG success = CRegKey::QueryValue(result, valueName);
#endif
        if(pSuccess)
            *pSuccess = success;
        return result;
    }
    
    DWORD QueryValueLong(UINT nValueNameID, DWORD defaultValue = 0, LONG *pSuccess = NULL)
    {
        CString valueName;
        if(valueName.LoadString(nValueNameID))
        {
            return QueryValueLong(valueName, defaultValue, pSuccess);
        }
        else
        {
            // couldn't find string for value name in stringtable
            if(pSuccess)
                *pSuccess = 2;
            return defaultValue;
        }
    }
    
    LONG SetValueLong(UINT value, LPCTSTR valueName)
    {
#if _MSC_VER >= 1300
        return SetDWORDValue(valueName, value);
#else
        return SetValue(value, valueName);
#endif
    }

    LONG SetValueLong(UINT value, UINT nValueNameID)
    {
        CString valueName;
        if(valueName.LoadString(nValueNameID))
        {
            return SetValueLong(value, valueName);
        }
        else
        {
            // couldn't find string for value name in stringtable
            return 2;
        }
    }


};

# Change User Description Committed
#1 19924 YourUncleBob Populate -o //guest/perforce_software/p4win/...
//guest/YourUncleBob/p4win/.....
//guest/perforce_software/p4win/main/common/RegKeyEx.h
#1 16169 perforce_software Move files to follow new path scheme for branches.
//guest/perforce_software/p4win/common/RegKeyEx.h
#1 8562 Matt Attaway These feet never stop running.

Initial commit of the P4Win source code.  To the best of our knowledge this
compiles and runs using the 2013.3 P4 API and VS 2010. Expect a few changes
as we refine the build process. Please post any build issues to the forums.