📄 regkey.cpp
字号:
#include "stdafx.h"
#include "Regkey.h"
CRegKey::CRegKey()
{
m_hKey = NULL;
}
CRegKey::~CRegKey()
{
Close();
}
LONG CRegKey::Open (HKEY hKeyRoot, LPCTSTR pszPath)
{
DWORD dw;
m_sPath = pszPath;
return RegCreateKeyEx (hKeyRoot, pszPath, 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL,
&m_hKey, &dw);
}
void CRegKey::Close()
{
if (m_hKey)
{
RegCloseKey (m_hKey);
m_hKey = NULL;
}
}
LONG CRegKey::Write (LPCTSTR pszKey, DWORD dwVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
return RegSetValueEx (m_hKey, pszKey, 0L, REG_DWORD,
(CONST BYTE*) &dwVal, sizeof(DWORD));
}
LONG CRegKey::Write (LPCTSTR pszKey, LPCTSTR pszData)
{
ASSERT(m_hKey);
ASSERT(pszKey);
ASSERT(pszData);
ASSERT(AfxIsValidAddress(pszData, strlen(pszData), FALSE));
return RegSetValueEx (m_hKey, pszKey, 0L, REG_SZ,
(CONST BYTE*) pszData, strlen(pszData) + 1);
}
LONG CRegKey::Write (LPCTSTR pszKey, const BYTE* pData,
DWORD dwLength)
{
ASSERT(m_hKey);
ASSERT(pszKey);
ASSERT(pData && dwLength > 0);
ASSERT(AfxIsValidAddress(pData, dwLength, FALSE));
return RegSetValueEx (m_hKey, pszKey, 0L, REG_BINARY,
pData, dwLength);
}
LONG CRegKey::Read (LPCTSTR pszKey, DWORD& dwVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = sizeof (DWORD);
DWORD dwDest;
LONG lRet = RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL,
&dwType, (BYTE *) &dwDest, &dwSize);
if (lRet == ERROR_SUCCESS)
dwVal = dwDest;
return lRet;
}
LONG CRegKey::Read (LPCTSTR pszKey, CString& sVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = 200;
char string[200];
LONG lReturn = RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL,
&dwType, (BYTE *) string, &dwSize);
if (lReturn == ERROR_SUCCESS)
sVal = string;
return lReturn;
}
LONG CRegKey::Read (LPCTSTR pszKey, BYTE* pData, DWORD& dwLen)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
return RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL,
&dwType, pData, &dwLen);
}
LONG CRegKey::GetEnumKeys(HKEY hKeyRoot, LPCTSTR pszPath, CStringArray &strArray)
{
int nIndex;
long lRetCode;
char szValue[MAX_PATH];
if ((lRetCode = Open(hKeyRoot, pszPath)) != ERROR_SUCCESS)
return lRetCode;
strArray.RemoveAll();
for (nIndex = 0, lRetCode = ERROR_SUCCESS; lRetCode == ERROR_SUCCESS; nIndex++)
{
lRetCode = RegEnumKey(m_hKey, nIndex, szValue, MAX_PATH);
if (lRetCode == ERROR_SUCCESS)
strArray.Add(szValue);
}
Close();
return ERROR_SUCCESS;
}
LONG CRegKey::GetEnumValues(HKEY hKeyRoot, LPCTSTR pszPath, CStringArray &strArray)
{
int nIndex;
long lRetCode;
char szValue[MAX_PATH];
DWORD dwValue;
if ((lRetCode = Open(hKeyRoot, pszPath)) != ERROR_SUCCESS)
return lRetCode;
strArray.RemoveAll();
for (nIndex = 0, lRetCode = ERROR_SUCCESS; lRetCode == ERROR_SUCCESS; nIndex++)
{
szValue[0] = '\0';
dwValue = MAX_PATH;
lRetCode = RegEnumValue(m_hKey, nIndex, szValue, &dwValue, NULL, NULL, NULL, NULL);
if (lRetCode == ERROR_SUCCESS)
strArray.Add(szValue);
}
Close();
return ERROR_SUCCESS;
}
BOOL CRegKey::DeleteKey(HKEY hKey,LPCTSTR pszSubKey,LPCTSTR pszValueName)
{
ASSERT( pszSubKey != 0 ) ;
ASSERT( hKey != 0 ) ;
HKEY hSubKey ;
LONG lRet = RegOpenKeyEx(
hKey, // key handle at root level
pszSubKey, // path name of child key
0, // reserved
KEY_WRITE | KEY_READ, // requesting access
&hSubKey // address of key to be returned
);
if( lRet != ERROR_SUCCESS )
{
ASSERT(0);
TRACE0( "CRegistry::DeleteKey(): RegOpenKeyEx() failed\n" ) ;
return FALSE ;
}
if( pszValueName )
{
// 如果参数pszValueName不为NULL则仅删除该键
lRet = RegDeleteValue( hSubKey, pszValueName ) ;
RegCloseKey( hSubKey ) ;
RegCloseKey( hKey ) ;
if( lRet != ERROR_SUCCESS )
{
ASSERT(0);
TRACE0( "CRegistry::DeleteKey(): RegDeleteValue() failed\n" );
return FALSE ;
}
}
else
{
DWORD dwSubKeyCnt = 0 ;
do
{
// 得到子键的信息
DWORD dwMaxSubKey ;
LONG lRet = RegQueryInfoKey(
hSubKey,
0, // buffer for class name
0, // length of class name string
0, // reserved
&dwSubKeyCnt, // # of subkeys
&dwMaxSubKey, // length of longest subkey
0, // length of longest class name string
0, // # of values
0, // length of longest value name
0, // length of longest value data
0, // security descriptor
0 // last write time
) ;
if( lRet != ERROR_SUCCESS )
{
TRACE0( "CRegistry::DeleteKey(): RegQueryInfoKey() failed.\n" ) ;
RegCloseKey( hSubKey ) ;
return FALSE ;
}
if( dwSubKeyCnt > 0 )
{
LPTSTR pszKeyName = new TCHAR [ dwMaxSubKey + 1 ] ;
DWORD dwKeyNameLen = dwMaxSubKey ;
lRet = RegEnumKey(
hSubKey,
0, // index
pszKeyName, // address of buffer for key name string
dwKeyNameLen+1 // max. length of key name string
) ;
if( lRet != ERROR_SUCCESS )
{
TRACE0( "CRegistry::DeleteKey(): RegEnumKey() failed\n" ) ;
delete [] pszKeyName ;
RegCloseKey( hSubKey ) ;
return FALSE ;
}
if( ! DeleteKey( hSubKey,pszKeyName, pszValueName ) )
{
delete [] pszKeyName ;
RegCloseKey( hSubKey ) ;
return FALSE ;
}
delete [] pszKeyName ;
}
} while( dwSubKeyCnt > 0 ) ;
RegCloseKey( hSubKey ) ;
lRet = RegDeleteKey( hKey, pszSubKey ) ;
//RegCloseKey( hKey ) ;
if( lRet != ERROR_SUCCESS )
{
TRACE0( "CRegistry::DeleteKey(): RegDeleteKey() failed\n" ) ;
return FALSE ;
}
}
return TRUE ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -