!!!!!!!!!!!!!!!!!如何用VC读写注册表!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

liso 2002-12-12 02:11:43
谁能贴点代码?????????????????
...全文
206 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
okin 2002-12-12
  • 打赏
  • 举报
回复
bj
lzd 2002-12-12
  • 打赏
  • 举报
回复
// Registry.h
注册表类
class CRegistry
{

public:
CRegistry();
CRegistry( HKEY, const char * );
~CRegistry();

BOOL Open( HKEY, const char * );
BOOL Close( void );
BOOL IsOpen( void );

BOOL ReadDWORD( const char *, DWORD *, DWORD *pdwLastError = NULL );
BOOL ReadString( const char *, LPVOID, int, DWORD *pdwLastError = NULL );
char **ReadMultipleStrings( const char *, DWORD *pdwLastError = NULL );
static void DeleteList( char ** );

BOOL WriteDWORD( const char *, DWORD, DWORD *pdwLastError = NULL );
BOOL WriteString( const char *, LPVOID, DWORD *pdwLastError = NULL );
BOOL Write( const char *, LPVOID, DWORD, int );

static BOOL CreateKey( HKEY, const char *, const char * );
static BOOL DeleteKey( HKEY, const char * );

protected:
HKEY m_hKey;
DWORD m_dwLastError;
int m_nSize;

BOOL Read( const char *, LPVOID, int );

};


// 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 );

}


用这个Class很好用!
liso 2002-12-12
  • 打赏
  • 举报
回复
上面的问题在各位的帮助下已经解决:

现在的问题:

在HKEY_LOCAL_MACHINE的software下已经建立了ttt

如果我想在ttt下写入:

名称 类型 数据
1 REG_CZ TMD
2 REG_CZ TNND
该调用那个函数????????我的代码:
::RegSetValue(hk,"1",REG_SZ,"TMD",4);
结果总写在 software\1 下:
名称 类型 数据
默认 REG_CZ TMD


救救偶,大侠们!!!!!!!!!!!!!!



司马青衫依旧 2002-12-12
  • 打赏
  • 举报
回复
API
WHJWHY 2002-12-12
  • 打赏
  • 举报
回复
http://www.csdn.net/cnshare/soft/7/7812.shtm
liso 2002-12-12
  • 打赏
  • 举报
回复
谢谢楼上几位的大恩大德

楼下的继续……
nustchenhf 2002-12-12
  • 打赏
  • 举报
回复
BOOL GetInProcServer(LPCTSTR lpszCLSID, CString& str) {
BOOL b = FALSE;

HKEY hKey = NULL;
if (RegOpenKey(HKEY_CLASSES_ROOT, _T("CLSID"), &hKey) == ERROR_SUCCESS) {
HKEY hKeyCLSID = NULL;
if (RegOpenKey(hKey, lpszCLSID, &hKeyCLSID) == ERROR_SUCCESS) {
HKEY hKeyInProc = NULL;
if (RegOpenKey(hKeyCLSID, _T("InProcServer32"), &hKeyInProc) == ERROR_SUCCESS) {
LPTSTR lpsz = str.GetBuffer(_MAX_PATH);
DWORD dwSize = _MAX_PATH * sizeof(TCHAR);
DWORD dwType;
LONG lRes = ::RegQueryValueEx(hKeyInProc, _T(""),
NULL, &dwType, (BYTE*)lpsz, &dwSize);
str.ReleaseBuffer();
b = (lRes == ERROR_SUCCESS);
RegCloseKey(hKeyInProc);
}
RegCloseKey(hKeyCLSID);
}
RegCloseKey(hKey);
}
return b;
}
SeainBlue 2002-12-12
  • 打赏
  • 举报
回复
SHDeleteKey()
Deletes a subkey and all its descendants. The function will remove the key and all of the key's values from the registry.

SHDeleteValue()
Deletes a named value from the specified registry key.
isdong 2002-12-12
  • 打赏
  • 举报
回复
CRegKey

#include <atlbase.h>
  • 打赏
  • 举报
回复
WINDOWPLACEMENT WndStatus;
WndStatus.length=sizeof(WINDOWPLACEMENT);
GetWindowPlacement(&WndStatus);
AfxGetApp()->WriteProfileInt("WINSTATUS","FLAG",WndStatus.flags);
SaveBarState(AfxGetApp()->m_pszProfileName);




读LoadProfileInt
liso 2002-12-12
  • 打赏
  • 举报
回复


给点提示也行,比如在VC中注册表的类、及类的定义等

kao,没人回复,自己动手up

up

up

up

up

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧