注册表操作

一、使用API函数操作注册表

1.RegCreateKey


该函数用于打开指定的键,如果键不存在,则新建一个键或子键
LONG RegCreatekey(HKEY hKey,LPCTSTR lpSubKey,PHKEY phkResult);
hKey:打开键的句柄
lpSubKey:函数打开或创建的键名
phkResult:函数返回的打开或创建键的句柄指针


2.RegCloseKey


该函数用于关闭注册表中的键
LONG RegCloseKey(HKEY hkey);


3.RegCreateKeyEx


该函数用于创建或打开注册表中的键
LONG RegCreateKeyEx(HKEY hkey,LPCTSTR lpSubkey,DWORD Reserved,LPTSTR lpClass,DWORD dwOptions,
REGSAM samDesired,LPSECURITY_ATTRIBUTES lpSecuritySttributes,PHKEY phkResult,LPDWORD lpdwDisposition );
hKey:父键句柄
lpSubKey:函数打开或创建的键名
Reserved:保留的
lpClass:键的类型
dwOptions:键的打开方式,REG_OPTION_BACKUP_RESTORE,表示以备份或还原的方式打开键;
REG_OPTION_NON_VOLATILE,表示键信息在系统重启后保存到文件中,这是默认的设置。
REG_OPTION_VOLATILE,表示键信息保存在内存中,当系统关闭后这些信息将不被保存
SamDesired:访问权限,如果为KEY_ALL_ACCESS,表示具有所有的访问权限
lpSecurityAttributes:安全属性信息,即子进程能否继承父进程中的该句柄
phkResult:函数打开或创建的键句柄
lpdwDisposition:用于返回函数执行的动作。如果为REG_CREATED_NEW_KEY,表示键不存在,函数将
创建键信息:为REG_OPENED_EXISTING_KEY,表示键已存在,函数指示打开键


4.RegDeleteKey


该函数用于从注册表中删除某个子键
LONG RegDeleteKey(HKEY hkey,LPCWSTR lpSubKey);
hKey:当前打开的父键句柄
lpSubKey:将要删除的子键名称


5.RegOpenKey


该函数用于打开注册表中所标识的键
LONG RegOpenKey(HKEY hkey,LPCTSTR lpSubKey,PHKEY phkResult);
hKey:当前打开的父键句柄
lpSubKey:将要打开的子键名称
phkResult:用于返回打开的子键句柄


6.RegOpenKeyEx


该函数用于打开注册表中所标识的键
LONG RegOpenKeyEx(HKEY hkey,LPCWSTR lpSubKey,DWORD uiOptions,REGSAM samDesired,HKKEY phkResult);
hKey:当前打开的父键句柄
lpSubKey:将要打开的子键名称
ulOptions:保留,必须为0
samdesired:未使用,必须为0
phkResult:用于返回打开的子键句柄


7.RegDeleteValue


该函数用于从注册表中移除指定键下的项
LONG RegDeleteValue(HKEY hkey,LPCWSTR lpValueName);
hKey:当前打开的键句柄
lpValueName:将要删除的项名称


8.RegQueryValue


该函数用于获取注册表中指定键下的默认值
LONG RegQueryValue(HKEY hkey,LPCTSTR lpSubkey,LPTSTR lpValue,PLONG lpcbValue);
hKey:当前打开的键句柄
lpSubKey:子键名称
lpValue:返回的数据
lpcbValue:标识lpValue缓冲区的大小


9.RegQueryValueEx


该函数用于获取注册表中指定键下某个项的值
LONG RegQueryValueEx(HKEY hkey,LPCWSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcdData);
hKey:当前打开的键句柄
lpValueName:项名称
lpReserved:保留,必须为NULL
lpTYPE:一个指针,用于接收项的数据类型
lpData:一个数据缓冲区,用于存储函数返回的数据
lpcdData:lpData数据缓冲区的大小


10.RegSetValue


该函数用于设置关联键的默认值
LONG RegSetValue(HKEY hkey,LPCTSTR lpSubKey,DWORD dwType,LPCTSTR lpData,DWORD cbData);
hKey:打开的父键句柄
lpSubKey:子键名称、
dwType:数据的存储类型
lpData:待设置的数据
cbData:lpData缓冲区的大小

11.RegSetValueEx


该函数用于设置指定键下的项信息
LONG RegSetValueEx(HKEY hkey,LPCWSTR lpValueName,DWORD Reserved,DWORD dwType,const BYTE* lpData,DWORD cvData);
hKey:打开的键句柄
lpValueName:项名称
Reserved:保留,必须为0
dwType:项的数据类型
lpData:待设置的数据
cbData:lpData缓冲区的大小

写入注册表
::OnOK()
{
 HKEY hroot;//定义注册表类型
 DWORD action;//定义一个整型变量
 CString keyname;//定义一个字符串变量
 m_KeyName.GetWindowText(keyname);//获取键名
 keyname+="\\";//设置键名
//创建键名
RegCreateKeyEx(HKEY_CURRENT_USER,keyname,0,NULL,0,KEY_WRITE,NULL,&hroot,&action);
CString itemname;//定义字符串变量
m_ItemName.GetWindowText(itemname);//获取项名
CString itemvalue;//定义字符串变量
m_ItemValue.GetWindowText(itemvalue);//获取项值
DWORD size=itemvalue.GetLength();//获取字符串长度
//设置项值
if(ERROR_SUCCESS==RegSetValueEx(hroot,itemname,0,REG_SZ,(unsigned char*)itemvalue.GetBuffer(0),size))
MessageBox("Successful");
RegCloseKey(hroot);//关闭键句柄
//当RegSetValueEx函数的返回值为ERROR_SUCCESS时,表示设置成功


读取
::OnRead()
{
HKEY hroot;//定义键句柄
CString keyname;//定义字符串
m_KeyName.GetWindowText(keyname);//获取键名
RegOpenKeyEx(HKEY_CURRENT_USER,keyname,0,KEY_READ,&hroot);//打开注册表键值
CString itemname;//定义字符串变量
m_ItemName.GetWindowText(itemname);//获取项名称
DWORD type=REG_SZ;//设置项的数据类型
CString data="temp";//定义一个字符串变量
DWORD size=MAX_PATH;//设置字符串代码
//从注册表中获取项信息
RegQueryValueEx(hroot,itemname,0,&type,(unsigned char*)data,GetBuffer(0),&size);
RegCloseKey(broot);//关闭键句柄
MessageBox(data,"提示");//以对话框形式显示数据
}



基于CRegKey类操作注册表


在使用CRegKey类时,需要引用头文件atlbase.h

1.create


该方法用于创建所标识的键
LONG Create(HKEY hKeyParent,LPCTSTR lpszKeyName,LPTSTR lpszClass=REG_NONE,DWORD dwOptions=REG_OPTION_NON_VOLATILE,REGSAM samDesired=KEY_ALL_ACCESS,LPSECURITY_ATTRIBUTES lpSecAttr=NULL,LPDWORD lpdwDisposition=NULL);
hKeyParent:打开的父键句柄
lpszkeyName:键名称
lpszClass:键的类型
dwOptions:键的打开方式,REG_OPTION_BACKUP_RESTORE,表示以备份或还原的方式打开键;
REG_OPTION_NON_VOLATILE,表示键信息在系统重启后保存到文件中,这是默认的设置。
REG_OPTION_VOLATILE,表示键信息保存在内存中,当系统关闭后这些信息将不被保存
SamDesired:访问权限,如果为KEY_ALL_ACCESS,表示具有所有的访问权限
lpSecAttr:键句柄的安全属性
lpdwDisposition:用于返回函数执行的动作。如果为REG_CREATED_NEW_KEY,表示键不存在,函数将
创建键信息:为REG_OPENED_EXISTING_KEY,表示键已存在,函数指示打开键


2,open


该方法用于打开注册表键值
LONG Open(HKEY hkeyParent,LPCTSTR lpszKeyName,REGSAM samDesired=KEY_ALL_ACCESS);
hKeyParent:打开的父键句柄
lpszKeyName:将要打开的键名称
samDesire:键的访问权限


3.SetValue


该方法用于设置指定键下的项信息
LONG SetValue(DWORD dwValue,LPCTSTR lpszValueName);
LONG SetValue(LPCTSTR lpszValue,LPCTSTR lpszValueName=NULL);
LONG SetValue(HKEY hKeyParent,LPCTSTR lpszKeyName,LPCTSTR lpszValue,LPCTSTR lpszValueName=NULL);
dwValue:设置的整数值
lpszValueName:设置的项名称
lpsaValue:设置的字符串数据
hKeyParent:父键句柄
lpszKeyName:键名称
lpszValue:设置的项数据
lpszValueName:项名称


4.QueryValue


该方法用于获取指定键下的数据
LONG QueryValue(LPCTSTR pszValueName,DWORD* pdwType,void* pData,ULONG pnBytes);
ATL_DEPRECATED LONG QueryValue(DWORD& dwValue,LPCTSTR lpszValueName);
ATL_DEPRECATED LONG QueryValue(LPTSTR szValue,LPCTSTR lpszValueName,DWORD *pdwCount);
pszValueName:查询的项名称
pdwType:整数指针,用于返回项的数据类型
pData:数据缓冲区,用于存储函数返回的数据
pnBytes:数据缓冲区pData的大小,在函数返回后,该函数表示实际返回的数据大小
dwValue:用于存储函数返回的整形数据
lpszValueName:要查询的注册表项名称
szValue:数据缓冲区,用于存储函数返回的字符串数据
pdwCount:字符串数据的大小
写入
::OnOk()
{
CRegKey reg;//定义一个CRegKey对象
CString key;//定义一个字符串变量
m_KeyName.GetWindowText(key);//获取编辑框文本
reg.create(HKEY_CURRENT_USER,key);//创建注册表键值
CString item;//定义字符串变量
m_ItemName.GetWindowtext(item);//获取项名
CString value;//定义字符串变量
m_ItemValue.GetWindowText(value);//获取项值
reg.SetValue(value.item);//项注册表中写入数据
reg.close();//关闭注册表键句柄
}


读取
::OnLoad()
{
CRegKey reg;//定义一个CRegKey对象
CString key;//定义字符串变量
m_KeyName.GetWindowText(key);//获取键名
reg.Open(HKEY_CURRENT_USER,key);//打开注册表键值
CString item;//定义字符串变量
m_ItemName.GetWindowText(item);//获取项名
CString value;//定义字符串变量
DWORD size=MAX_PATH;//定义整型变量
reg.QueryValue(value.GetBuffer(0),item,&size);//从注册表读取数据
MessageBox(value,"提示");//一对话框形式弹出读取的数据
}



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值