Привет всем кто не спит!
Урезанный немного мне показался этот класс и я его расширил:
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;
};
};