⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regkey.cpp

📁 一个教你如何制作安装程序的源码
💻 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 + -