• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

关于注册表的源程序

发布: 2007-7-14 21:11 | 作者: 佚名    | 来源: 网络转载     | 查看: 24次 | 进入软件测试论坛讨论

领测软件测试网 // Registry.cpp

#include "stdafx.h"
#include "Registry.h"

CRegistry::CRegistry()
{

m_hKey = NULL;
Open( _hKey, m_strUseKey );

}

CRegistry::CRegistry( HKEY hKey, const char *lpszSubKey )
{

m_hKey = NULL;
Open( hKey, lpszSubKey );

}

CRegistry::~CRegistry()
{

Close();

}

BOOL CRegistry::Open( HKEY hKey, const char *lpszSubKey )
{

Close();

if( ::RegOpenKeyEx( hKey, lpszSubKey, 0, KEY_ALL_ACCESS, &m_hKey ) != ERROR_SUCCESS ){
m_hKey = NULL;
m_dwLastError = GetLastError();
return( FALSE );
}

return( TRUE );

}

BOOL CRegistry::Close( void )
{
BOOL bRet = TRUE;

if( m_hKey == NULL )
return( FALSE );

bRet = ( ::RegCloseKey( m_hKey ) == ERROR_SUCCESS );
m_hKey = NULL;

return( bRet );

}

BOOL CRegistry::IsOpen( void )
{

return( m_hKey != NULL );

}

BOOL CRegistry::Read( const char *lpszValueName, LPVOID lpReturnBuffer, int nSize )
{

if( m_hKey == NULL )
return( FALSE );

DWORD dwSize = (DWORD) nSize;
BOOL bRet = ( ::RegQueryValueEx( m_hKey, lpszValueName, NULL, NULL, (unsigned char *) lpReturnBuffer, &dwSize ) == ERROR_SUCCESS );

m_dwLastError = GetLastError();

return( bRet );

}

BOOL CRegistry::ReadDWORD( const char *lpszValueName, DWORD *pdwData, DWORD *pdwLastError )
{

if( m_hKey == NULL )
return( FALSE );

BOOL bRet = Read( lpszValueName, pdwData, sizeof( DWORD ) );

if( pdwLastError != NULL )
*pdwLastError = m_dwLastError;

return( bRet );

}

BOOL CRegistry::ReadString( const char *lpszValueName, LPVOID lpReturnBuffer, int nSize, DWORD *pdwLastError )
{

if( m_hKey == NULL )
return( FALSE );

char *lpWork = (char *) lpReturnBuffer;
lpWork[0] = 0;
BOOL bRet = Read( lpszValueName, lpReturnBuffer, nSize );

if( pdwLastError != NULL )
*pdwLastError = m_dwLastError;

return( bRet );

}

char **CRegistry::ReadMultipleStrings( const char *lpszValueName, DWORD *pdwLastError )
{
char szEntireString[2500];

if( !ReadString( lpszValueName, szEntireString, 2500, pdwLastError ) )
return( NULL );

if( szEntireString[0] == 0 )
return( NULL );

int nCount = 0;
if( szEntireString[strlen(szEntireString)-1] != ';' )
nCount = 1;
char *pPointer = szEntireString;
do{
pPointer = strstr( pPointer, ";" );
if( pPointer != NULL ){
nCount++;
pPointer++;
}
} while( pPointer != NULL );

int i = 0;
char *pEnd;
char **pList = (char **) new char [(nCount+3)*sizeof(char *)];
if( pList == NULL )
return( NULL );
memset( pList, 0, ( nCount + 3 ) * sizeof(char *) );

pPointer = szEntireString;
do{

pEnd = strstr( pPointer, ";" );
int nSize = strlen( pPointer );
if( pEnd != NULL )
nSize = pEnd - pPointer;

pList[i] = new char [nSize+3];
if( pList[i] != NULL ){
memset( pList[i], 0, nSize + 3 );
memcpy( pList[i], pPointer, nSize );
}
else pEnd = NULL;

pPointer = pEnd;
if( pPointer != NULL )
pPointer++;

i++;

} while( pPointer != NULL && pPointer[0] != 0 );

return( pList );

}

void CRegistry::DeleteList( char **pList )
{

if( pList == NULL )
return;

int i = 0;
while( pList[i] != NULL ){
delete [] pList[i];
i++;
}
delete pList;

}

BOOL CRegistry::WriteDWORD( const char *lpszValueName, DWORD dwData, DWORD *pdwLastError )
{

if( m_hKey == NULL )
return( FALSE );

m_nSize = sizeof( DWORD );
BOOL bRet = Write( lpszValueName, &dwData, REG_DWORD, sizeof( DWORD ) );

if( pdwLastError != NULL )
*pdwLastError = m_dwLastError;

return( bRet );

}

BOOL CRegistry::WriteString( const char *lpszValueName, LPVOID lpData, DWORD *pdwLastError )
{

if( m_hKey == NULL )
return( FALSE );

m_nSize = 2000;
BOOL bRet = Write( lpszValueName, lpData, REG_SZ, (DWORD) strlen( (const char *) lpData ) + 1 );

if( pdwLastError != NULL )
*pdwLastError = m_dwLastError;

return( bRet );

}

BOOL CRegistry::Write( const char *lpszValueName, LPVOID lpData, DWORD dwType, int nSize )
{

if( m_hKey == NULL )
return( FALSE );

DWORD dwSize = (DWORD) m_nSize;
BOOL bRet = ( ::RegSetValueEx( m_hKey, lpszValueName, 0, dwType, (unsigned char *) lpData, nSize ) == ERROR_SUCCESS );

m_dwLastError = GetLastError();

return( bRet );

}

BOOL CRegistry::CreateKey( HKEY hKey, const char *lpszSubKey, const char *lpszClass )
{
HKEY hOpenedKey;
DWORD dwDisposition;
DWORD dwLastError;

BOOL bRet = ( ::RegCreateKeyEx( hKey, lpszSubKey, 0, (char *) lpszClass, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hOpenedKey, &dwDisposition ) == ERROR_SUCCESS );
if( bRet ) ::RegCloseKey( hOpenedKey );
dwLastError = GetLastError();

return( bRet );

}

BOOL CRegistry::DeleteKey( HKEY hKey, const char *lpszSubKey )
{
BOOL bRet;
DWORD dwLastError;

bRet = ( ::RegDeleteKey( hKey, lpszSubKey ) == ERROR_SUCCESS );
dwLastError = GetLastError();

return( bRet );

}

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网