📄 registry.cpp
字号:
return (lResult == ERROR_SUCCESS);
}
BOOL CBCGRegistry::Read(LPCTSTR pszKey, int& iVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = sizeof (DWORD);
DWORD dwDest;
LONG lReturn = RegQueryValueEx (m_hKey, (LPTSTR) pszKey, NULL,
&dwType, (BYTE *) &dwDest, &dwSize);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwSize;
if(lReturn == ERROR_SUCCESS)
{
iVal = (int)dwDest;
return TRUE;
}
return FALSE;
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, DWORD& dwVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = sizeof (DWORD);
DWORD dwDest;
LONG lReturn = RegQueryValueEx (m_hKey, (LPTSTR) pszKey, NULL,
&dwType, (BYTE *) &dwDest, &dwSize);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwSize;
if(lReturn == ERROR_SUCCESS)
{
dwVal = dwDest;
return TRUE;
}
return FALSE;
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, CString& sVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = 200;
char szString[255];
LONG lReturn = RegQueryValueEx (m_hKey, (LPTSTR) pszKey, NULL,
&dwType, (BYTE *) szString, &dwSize);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwSize;
if(lReturn == ERROR_SUCCESS)
{
sVal = szString;
return TRUE;
}
return FALSE;
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, CStringList& scStringList)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(scStringList.IsSerializable());
scStringList.RemoveAll();
scStringList.Serialize(ar);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, CByteArray& bcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = bcArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(bcArray.IsSerializable());
bcArray.RemoveAll();
bcArray.SetSize(10);
bcArray.Serialize(ar);
bcArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, CDWordArray& dwcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
// int OldSize = dwcArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(dwcArray.IsSerializable());
dwcArray.RemoveAll();
// dwcArray.SetSize(10);
dwcArray.SetSize(0);
dwcArray.Serialize(ar);
// dwcArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, CWordArray& wcArray)
{
wcArray.SetSize (0);
BOOL bSucess = FALSE;
BYTE* pData = NULL;
UINT uDataSize;
if (!Read (pszKey, &pData, &uDataSize))
{
ASSERT (pData == NULL);
return FALSE;
}
ASSERT (pData != NULL);
try
{
CMemFile file (pData, uDataSize);
CArchive ar (&file, CArchive::load);
int iSize;
ar >> iSize;
wcArray.SetSize (iSize);
for (int i = 0; i < iSize; i ++)
{
ar >> wcArray [i];
}
bSucess = TRUE;
}
catch (CMemoryException* pEx)
{
pEx->Delete ();
TRACE(_T("Memory exception in CBCGRegistry::Read ()!\n"));
}
catch (CArchiveException* pEx)
{
pEx->Delete ();
TRACE(_T("CArchiveException exception in CBCGRegistry::Read ()!\n"));
}
delete pData;
return bSucess;
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, CStringArray& scArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = scArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(scArray.IsSerializable());
scArray.RemoveAll();
scArray.SetSize(10);
scArray.Serialize(ar);
scArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CBCGRegistry::Read(LPCTSTR pszKey, CRect& rect)
{
BOOL bSucess = FALSE;
BYTE* pData = NULL;
UINT uDataSize;
if (!Read (pszKey, &pData, &uDataSize))
{
ASSERT (pData == NULL);
return FALSE;
}
ASSERT (pData != NULL);
try
{
CMemFile file (pData, uDataSize);
CArchive ar (&file, CArchive::load);
ar >> rect;
bSucess = TRUE;
}
catch (CMemoryException* pEx)
{
pEx->Delete ();
TRACE(_T("Memory exception in CBCGRegistry::Read ()!\n"));
}
catch (CArchiveException* pEx)
{
pEx->Delete ();
TRACE(_T("CArchiveException exception in CBCGRegistry::Read ()!\n"));
}
delete pData;
return bSucess;
}
BOOL CBCGRegistry::Read(LPCTSTR pszKey, LPPOINT& lpPoint)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 20;
CDWordArray dwcArray;
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(dwcArray.IsSerializable());
dwcArray.RemoveAll();
dwcArray.SetSize(5);
dwcArray.Serialize(ar);
ar.Close();
file.Close();
lpPoint->x = dwcArray.GetAt(0);
lpPoint->y = dwcArray.GetAt(1);
}
m_Info.lMessage = lReturn;
m_Info.dwType = REG_POINT;
m_Info.dwSize = sizeof(POINT);
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, BYTE** ppData, UINT* pBytes)
{
ASSERT (m_hKey != NULL);
ASSERT (pszKey != NULL);
ASSERT(ppData != NULL);
ASSERT(pBytes != NULL);
*ppData = NULL;
*pBytes = 0;
DWORD dwType, dwCount;
LONG lResult = ::RegQueryValueEx (m_hKey, pszKey, NULL, &dwType,
NULL, &dwCount);
if (lResult == ERROR_SUCCESS)
{
*pBytes = dwCount;
ASSERT (dwType == REG_BINARY);
*ppData = new BYTE [*pBytes];
lResult = ::RegQueryValueEx (m_hKey, pszKey, NULL, &dwType,
*ppData, &dwCount);
if (lResult == ERROR_SUCCESS)
{
ASSERT (dwType == REG_BINARY);
}
else
{
delete [] *ppData;
*ppData = NULL;
}
}
m_Info.lMessage = lResult;
m_Info.dwType = REG_BINARY;
m_Info.dwSize = *pBytes;
return (lResult == ERROR_SUCCESS);
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, CObList& list)
{
BOOL bSucess = FALSE;
BYTE* pData = NULL;
UINT uDataSize;
while (!list.IsEmpty ())
{
delete list.RemoveHead ();
}
if (!Read (pszKey, &pData, &uDataSize))
{
ASSERT (pData == NULL);
return FALSE;
}
ASSERT (pData != NULL);
try
{
CMemFile file (pData, uDataSize);
CArchive ar (&file, CArchive::load);
list.Serialize (ar);
bSucess = TRUE;
}
catch (CMemoryException* pEx)
{
pEx->Delete ();
TRACE(_T("Memory exception in CBCGRegistry::Read ()!\n"));
}
catch (CArchiveException* pEx)
{
pEx->Delete ();
TRACE(_T("CArchiveException exception in CBCGRegistry::Read ()!\n"));
}
delete pData;
return bSucess;
}
BOOL CBCGRegistry::Read (LPCTSTR pszKey, CObject& obj)
{
BOOL bSucess = FALSE;
BYTE* pData = NULL;
UINT uDataSize;
if (!Read (pszKey, &pData, &uDataSize))
{
ASSERT (pData == NULL);
return FALSE;
}
ASSERT (pData != NULL);
try
{
CMemFile file (pData, uDataSize);
CArchive ar (&file, CArchive::load);
obj.Serialize (ar);
bSucess = TRUE;
}
catch (CMemoryException* pEx)
{
pEx->Delete ();
TRACE(_T("Memory exception in CBCGRegistry::Read ()!\n"));
}
catch (CArchiveException* pEx)
{
pEx->Delete ();
TRACE(_T("CArchiveException exception in CBCGRegistry::Read ()!\n"));
}
delete pData;
return bSucess;
}
BOOL CBCGRegistry::DeleteValue (LPCTSTR pszValue)
{
ASSERT(m_hKey);
LONG lReturn = RegDeleteValue(m_hKey, pszValue);
m_Info.lMessage = lReturn;
m_Info.dwType = 0L;
m_Info.dwSize = 0L;
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CBCGRegistry::DeleteKey (LPCTSTR pszPath, BOOL bAdmin)
{
//--------------------------
// Enhanced by Erwin Tratar
//--------------------------
if (m_bReadOnly)
{
return FALSE;
}
ASSERT (pszPath != NULL);
CString strPath = pszPath;
int iPathLen = strPath.GetLength ();
if (iPathLen > 0 && strPath [iPathLen - 1] == _T('\\'))
{
strPath = strPath.Left (iPathLen - 1);
}
// open the key
HKEY hSubKey;
LONG lReturn = ::RegOpenKeyEx (bAdmin ? HKEY_LOCAL_MACHINE :
HKEY_CURRENT_USER,
strPath, 0L, KEY_ALL_ACCESS, &hSubKey);
if(lReturn != ERROR_SUCCESS)
return FALSE;
// first, delete all subkeys (else it won't work on NT!)
for( DWORD dwSubKeys = 1; dwSubKeys > 0; )
{
dwSubKeys = 0;
// first get an info about this subkey ...
DWORD dwSubKeyLen;
if( ::RegQueryInfoKey( hSubKey, 0,0,0, &dwSubKeys, &dwSubKeyLen,
0,0,0,0,0,0) != ERROR_SUCCESS)
{
::RegCloseKey(hSubKey);
return FALSE;
}
if( dwSubKeys > 0 )
{
// call DeleteKey() recursivly
LPTSTR szSubKeyName = new TCHAR[dwSubKeyLen + 1];
if( ::RegEnumKey( hSubKey, 0, szSubKeyName, dwSubKeyLen+1) !=
ERROR_SUCCESS
|| ! DeleteKey( strPath + "\\" + szSubKeyName, bAdmin ) )
{
delete szSubKeyName;
::RegCloseKey(hSubKey);
return FALSE;
}
delete szSubKeyName;
}
}
::RegCloseKey(hSubKey);
// finally delete the whole key
lReturn = ::RegDeleteKey (bAdmin ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
strPath);
m_Info.lMessage = lReturn;
m_Info.dwType = 0L;
m_Info.dwSize = 0L;
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CBCGRegistry::ReadSubKeys(CStringArray& SubKeys)
{
BOOL result = TRUE;
DWORD rc = ERROR_SUCCESS;
TCHAR szSubKey[ 1024 ] = _T("\0");
DWORD length = sizeof( szSubKey );
ASSERT(m_hKey);
int index = 0;
rc = RegEnumKeyEx(m_hKey, index, szSubKey, &length, NULL, NULL, NULL, NULL);
if( rc == ERROR_NO_MORE_ITEMS) {
result = false;
}
else while(rc == ERROR_SUCCESS) {
SubKeys.Add( szSubKey );
length = sizeof( szSubKey );
index++;
rc = RegEnumKeyEx(m_hKey, index, szSubKey, &length, NULL, NULL, NULL, NULL);
} // while
return( result );
}
BOOL CBCGRegistry::ReadKeyValues(CStringArray &Values)
{
DWORD rc = ERROR_SUCCESS;
BOOL result = FALSE;
TCHAR szValue[ 1024 ];
DWORD length = sizeof( szValue );
int index = 0;
ASSERT(m_hKey);
rc = RegEnumValue(m_hKey, index, szValue, &length, NULL, NULL, NULL, NULL);
if( rc == ERROR_NO_MORE_ITEMS) {
result = FALSE;
}
else while( rc == ERROR_SUCCESS ) {
result = TRUE;
Values.Add( szValue );
length = sizeof( szValue );
index++;
rc = RegEnumValue(m_hKey, index, szValue, &length, NULL, NULL, NULL, NULL);
}
return( result );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -