CRegKey из Atl
От: Алекс Россия http://wise-orm.com
Дата: 17.08.02 19:15
Оценка:
Привет всем кто не спит!
Урезанный немного мне показался этот класс и я его расширил:
class CRegKeyEx : public CRegKey  
{
public:
    LONG SetValue(DWORD dwValue, LPCTSTR lpszValueName)
    {
        return CRegKey::SetValue(dwValue,lpszValueName);
    };
    LONG SetValue(HKEY hKeyParent, LPCTSTR lpszKeyName, LPCTSTR lpszValue, LPCTSTR lpszValueName)
    {
        return CRegKey::SetValue(hKeyParent,lpszKeyName,lpszValue,
            lpszValueName);
    };
    LONG SetValue(LPCTSTR lpszVal,LPCTSTR lpszName,DWORD dwType = REG_SZ)
    {
        ATLASSERT(lpszVal != NULL);
        ATLASSERT(m_hKey != NULL);
        return RegSetValueEx(m_hKey, lpszName, NULL, dwType,
            (BYTE * const)lpszVal, (lstrlen(lpszVal)+1)*sizeof(TCHAR));
    };
    ULONGREF m_dwIndex;
    CRegKeyEx(){m_dwIndex = -1;};
    ~CRegKeyEx(){};

    void BeginEnum(){InterlockedExchange(&m_dwIndex,-1);};

    DWORD EnumKeys(LPTSTR lpName,LPDWORD lpcName){
        return RegEnumKeyEx(m_hKey,InterlockedIncrement(&m_dwIndex),
            lpName,lpcName,NULL,NULL,NULL,NULL);
    };

    DWORD EnumValues(LPTSTR lpName,LPDWORD lpcName,LPDWORD pdwType = NULL,
        PVOID pData = NULL, LPDWORD pdwSize = NULL){
        return RegEnumValue(m_hKey,InterlockedIncrement(&m_dwIndex),
            lpName,lpcName,NULL,pdwType,(LPBYTE)pData,pdwSize);
    };

    bool IsValueExist(LPTSTR lpName)
    {
        DWORD dwSz = lstrlen(lpName)+1;
        TCHAR* pbuf = new TCHAR[dwSz];
        bool retval = false;
        BeginEnum();
        for(;;)
        {
            int err = EnumValues(pbuf,&dwSz);
            if (err != ERROR_SUCCESS) break;
            if (!lstrcmpi(lpName,pbuf)){
                retval = true;
                break;
            }
        }
        delete[] pbuf;
        return retval;
    };

};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.