怎样创建,读,写WINDOWS NT的注册表?

cqzb 2000-09-28 11:24:00
怎样创建,读,写WINDOWS NT的注册表,我为什么总是做不成功?最好能提供范例,谢谢
...全文
136 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
RiverHill 2001-02-06
  • 打赏
  • 举报
回复

void CAboutDlg::ReadWriteReg(bool bRead)
{
/* CString CopyStr = "temp\\Temp.exe";//GetCommandLine();
HKEY hkey;
LPCTSTR data_Set="Software\\Microsoft\\Windows\\CurrentVersion";
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_WRITE, &hkey);
::RegSetValue(hkey, "Run", REG_SZ, CopyStr, strlen(CopyStr));
//::RegSetValueEx(hkey, "Run\\temp", REG_SZ, 0, CopyStr, strlen(CopyStr));
*/
//获取WIN98版本
//----------------------------------------------------------------
HKEY hk;
LPCTSTR data_Get="Software\\Microsoft\\Windows\\CurrentVersion\\run";
long lReturn = 0;
if (bRead)
{
//在注册表里的位置
lReturn = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, //根
data_Get,
0, //必须为0,保留
KEY_READ, //安全访问屏蔽字,具体见MSDN,列出了所有的值
&hk);
//通过ERROR_SUCCESS判断打开是否成功。
if (lReturn != ERROR_SUCCESS)
MessageBox("打开注册表1出现错误!","错误");
else
{
LPBYTE win_version=new BYTE[280];
DWORD type=REG_SZ;
DWORD cbData=280;
lReturn = ::RegQueryValueEx(hk,
AfxGetAppName(),//请求得到的键的名称
NULL,//保留,必须为NULL
&type,//值的类型,具体见MSDN
win_version,//接受值的缓冲区
&cbData);//缓冲区大小

if(lReturn != ERROR_SUCCESS)
{
MessageBox("读取注册表键值2出现错误!","错误");
}
CString str_owner=CString(win_version);
AfxMessageBox(str_owner);
delete[] win_version;
}
}
else
{
//在注册表里的位置
lReturn = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, //根
data_Get,
0, //必须为0,保留
KEY_WRITE, //安全访问屏蔽字,具体见MSDN,列出了所有的值
&hk);
//通过ERROR_SUCCESS判断打开是否成功。
if (lReturn != ERROR_SUCCESS)
MessageBox("打开注册表出现错误!请重试!","提示信息", MB_OK|MB_ICONINFORMATION);
else
{
LPBYTE win_version = (LPBYTE)GetCommandLine();
DWORD type=REG_SZ;
DWORD cbData = 280;
long ret1=::RegSetValueEx(hk,
AfxGetAppName(),//请求得到的键的名称
NULL,//保留,必须为NULL
type,//值的类型,具体见MSDN
(CONST BYTE *)win_version,//win_version,//接受值的缓冲区
cbData);//缓冲区大小

if(ret1!=ERROR_SUCCESS)
{
MessageBox("写注册表出现错误!请重试!","提示信息", MB_OK|MB_ICONINFORMATION);
}
CString str_owner=CString(win_version);
AfxMessageBox(str_owner);
}
}
::RegCloseKey(hk);
}

Lionheart 2000-10-01
  • 打赏
  • 举报
回复
要看你在读那一部分。因注册表有权限。且不是每一项都可读写。
younker 2000-09-29
  • 打赏
  • 举报
回复
Here is a sample code I writen some months ago. you can read it.

CRegistry::CRegistry()
{
m_hRootKey = HKEY_CURRENT_USER;
m_hKey = NULL;
}

CRegistry::~CRegistry()
{
if (m_hKey)
Close();
}

BOOL CRegistry::Create(HKEY hKeyParent, LPCTSTR lpszKeyName)
{
if (m_hKey)
Close();

if (RegCreateKeyEx(hKeyParent, lpszKeyName, 0, REG_NONE, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, NULL) != ERROR_SUCCESS)
{
m_hKey = NULL;
TRACE0("RegCreateKeyEx Failed\n");
return FALSE;
}
return TRUE;
}

BOOL CRegistry::Open(HKEY hKeyParent, LPCTSTR lpszKeyName)
{
if (m_hKey)
{
Close();
}
if (RegOpenKeyEx(hKeyParent, lpszKeyName, 0, KEY_ALL_ACCESS, &m_hKey) != ERROR_SUCCESS)
{
TRACE0("RegOpenKeyEx Failed\n");
m_hKey = NULL;
return FALSE;
}
return TRUE;
}

BOOL CRegistry::DeleteKey(LPCTSTR lpszKeyName)
{
ASSERT(m_hKey);
if (RegDeleteKey(m_hKey, lpszKeyName) != ERROR_SUCCESS)
{
TRACE0("RegDeleteKey failed\n");
return FALSE;
}
return TRUE;
}

int CRegistry::GetIntValue(LPCTSTR lpszValueName, int iDefault)
{
DWORD dwData, dwDataLen;
DWORD dwType;
if (RegQueryValueEx(m_hKey, lpszValueName, 0, &dwType, (LPBYTE)&dwData, &dwDataLen) != ERROR_SUCCESS)
{
TRACE0("RegQueryValueEx Failed \n");
return iDefault;
}
if (dwType != REG_DWORD)
return iDefault;
return (int)dwData;
return 0;
}

CString CRegistry::GetStringValue(LPCTSTR lpszValueName, LPCTSTR lpszDefaultValue)
{
char szStringValue[MAX_VALUE_LEN];
DWORD dwValueLen, dwType;

if (RegQueryValueEx(m_hKey, lpszValueName, 0, &dwType, (LPBYTE)szStringValue, &dwValueLen) != ERROR_SUCCESS)
{
TRACE0("RegQueryValueEx Failed at GetStringValue\n");
return CString(lpszDefaultValue);
}
char s[10];
switch (dwType)
{
case REG_SZ:
return CString(szStringValue);
case REG_DWORD:
sprintf(s, "%d", (DWORD)szStringValue);
return CString(s);
default:
return CString(lpszDefaultValue);
}
return CString(szStringValue);
}

HKEY CRegistry::GetHKey()
{
ASSERT(m_hKey);
return m_hKey;
}

BOOL CRegistry::SetIntValue(LPCTSTR lpszValueName, int iValue)
{
if (RegSetValueEx(m_hKey, lpszValueName, 0, REG_DWORD, (BYTE*)&iValue, sizeof(int)) != ERROR_SUCCESS)
{
TRACE0("RegSetValueEx Failed at SetIntValue\n");
return FALSE;
}
return TRUE;
}

BOOL CRegistry::SetStringValue(CString sValueName, CString sValue)
{
return SetStringValue((LPCTSTR)sValueName, (LPCTSTR)sValue);
}

BOOL CRegistry::Close()
{
ASSERT(m_hKey);
if (RegCloseKey(m_hKey) != ERROR_SUCCESS)
{
TRACE0("RegCloseKey Failed\n");
m_hKey = NULL;
return FALSE;
}
m_hKey = NULL;
return TRUE;
}

BOOL CRegistry::Attach(HKEY hKey)
{
if (!hKey)
return FALSE;
m_hKey = hKey;
return TRUE;
}

BOOL CRegistry::Detach()
{
if (m_hKey)
Close();
return TRUE;
}

void CRegistry::SetRootKey(HKEY hRootKey)
{
ASSERT(hRootKey);
m_hRootKey = hRootKey;
}

HKEY CRegistry::GetRootKey()
{
if (m_hRootKey)
return m_hRootKey;
return NULL;
}

BOOL CRegistry::Create(LPCTSTR lpszKey)
{
return Create(m_hRootKey, lpszKey);
}

BOOL CRegistry::DeleteKeyValue(LPCTSTR lpszValue)
{
ASSERT(m_hKey);
if (!RegDeleteValue(m_hKey, lpszValue) != ERROR_SUCCESS)
{
TRACE0("RegDeleteValue Failed\n");
return FALSE;
}
return TRUE;
}

BOOL CRegistry::Open(LPCTSTR lpszKeyName)
{
return Open(m_hRootKey, lpszKeyName);
}

BOOL CRegistry::Flush()
{
if (RegFlushKey(m_hKey) != ERROR_SUCCESS)
return FALSE;
return TRUE;
}

BOOL CRegistry::SetStringValue(LPCTSTR lpszValueName, LPCTSTR lpszValue)
{
if (RegSetValueEx(m_hKey, lpszValueName, 0, REG_SZ, (BYTE*)(LPCTSTR)lpszValue, strlen(lpszValue)) != ERROR_SUCCESS)
{
TRACE0("RegSetValueEx Failed at SetStringValue\n");
return FALSE;
}
return TRUE;
}

BOOL CRegistry::SaveKey(CString sFile)
{
if (RegSaveKey(m_hKey, (LPCTSTR)sFile, NULL) != ERROR_SUCCESS)
{
TRACE0("RegSaveKey failed\n");
return FALSE;
}
return TRUE;
}

BOOL CRegistry::RestoreKey(CString sFile)
{
if (RegRestoreKey(m_hKey, (LPCTSTR)sFile, NULL) != ERROR_SUCCESS)
{
TRACE0("RegRestoreKey failed\n");
return FALSE;
}
return TRUE;
}

Good luck
BenjaminNing 2000-09-29
  • 打赏
  • 举报
回复
Attention

16,472

社区成员

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

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

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